はじめに
今回もSQLabさんの問題を解いていきながら、ステップバイステップでSQLについて学んでいこうと思います。
前回のSELECT文に続いて、今回はWHERE文についてまとめていきたいと思います!
初級編
SELECT文
WHERE文
今回はSQLの基礎中の基礎であるWHERE文について学びます!
SELECTで出力するものの条件を指定します。
問題1(検索)
発行年が2020年の書籍一覧を取得してください。
解答・解説
SELECT * FROM books
WHERE release_year = 2020;
解説
books
テーブルからrelease_year
が2020の書籍を全て取得します。WHERE
句を使用して特定の条件(この場合は発行年が2020年)に一致するレコードをフィルタリングしています。
ポイント
- 同じかどうかは
=
、違うかどうかは!=
を使います。 -
WHERE
句は、テーブルから特定の条件に一致するデータを抽出するために使用します。
問題2(文字の検索)
書籍名が「宇宙の歴史」のデータを取得してください。
解答・解説
SELECT * FROM books
WHERE name = '宇宙の歴史';
解説
books
テーブルからname
が「宇宙の歴史」である書籍を取得します。文字列を比較する際には、シングルクォーテーション ' '
で囲む必要があります。
ポイント
- 文字列を検索する際には、値をシングルクォーテーション
' '
で囲みます。
問題3(キーワード)
「マンガ」というキーワードを含む書籍一覧を取得してください。
解答・解説
SELECT * FROM books
WHERE name LIKE '%マンガ%';
解説
このクエリは、name
列に「マンガ」という文字列が含まれる書籍を取得します。LIKE
演算子とワイルドカード文字 %
を使用して部分一致検索を行います。
ポイント
-
LIKE
演算子は部分一致検索を行う際に使用します。 -
%
は任意の文字列(0文字以上)を表すワイルドカードです。 -
_
は任意の1文字を表すワイルドカードです。 -
'%キーワード%'
の形式で、文字列のどの位置にキーワードがあっても一致します。
問題4(数量指定)
男性の著者を先頭から3名取得してください。
解答・解説
SELECT * FROM authors
WHERE gender = '男性'
LIMIT 3;
解説
gender
が「男性」である著者を3名取得します。LIMIT
句を使用して取得するレコード数を制限しています。
※データの順序を指定したい場合は、ORDER BY
句を使用する必要があります。
ポイント
-
LIMIT
句は、結果セットの行数を制限します。 - データベースによっては
FETCH FIRST 3 ROWS ONLY
を使用することもあります。 - 特定の順序でデータを取得したい場合は、
ORDER BY
句と組み合わせて使用します。
問題5(NULL or NOT NULL)
発行年が明記されている書籍一覧を取得してください。
解答・解説
SELECT *
FROM books
WHERE release_year IS NOT NULL;
解説
release_year
がNULLでない(つまり、値が明記されている)書籍を取得します。IS NOT NULL
を使用してNULLでない値を検索します。
ポイント
-
NULL
は「値が存在しない」ことを表します。 -
=
や!=
でNULLを比較することはできません。代わりに、IS NULL
やIS NOT NULL
を使用します。
問題6(範囲)
総ページ数が300~400ページの書籍一覧を取得してください。
解答・解説
SELECT *
FROM books
WHERE total_page BETWEEN 300 AND 400;
解説
total_page
が300以上400以下の書籍を取得します。BETWEEN
演算子は指定した範囲内の値を検索します。
ポイント
-
BETWEEN A AND B
は、値がA
以上B
以下の範囲を含みます。 - 範囲指定には、
>=
や<=
を使用しても同じ結果が得られます。WHERE total_page >= 300 AND total_page <= 400;
問題7(複数条件1)
発行年が2004, 2008, 2018年の書籍一覧を取得してください。
解答・解説
SELECT *
FROM books
WHERE release_year IN (2004, 2008, 2018);
または
SELECT *
FROM books
WHERE release_year = 2004 OR release_year = 2008 OR release_year = 2018;
解説
このクエリは、release_year
が2004、2008、または2018である書籍を取得します。IN
演算子を使用すると、複数の値を簡潔に指定できます。
ポイント
-
IN
演算子はリスト内のいずれかの値に一致するレコードを検索します。 - 複数の
OR
条件を使用すると同じ結果が得られますが、IN
を使用する方が読みやすくなります。
問題8(パターンマッチング)
ISBNが「978」で始まる書籍一覧を取得してください。
解答・解説
SELECT *
FROM books
WHERE isbn LIKE '978%';
解説
このクエリは、isbn
が「978」で始まる書籍を取得します。LIKE
演算子とワイルドカード%
を組み合わせて、特定のパターンに一致する文字列を検索しています。
ポイント
- 文字列の先頭を指定する場合は、
'パターン%'
とします。 -
%
は任意の文字列(0文字以上)を表します。 -
LIKE
はパターンマッチングに使用されます。
問題9(四則演算)
書籍の税込価格一覧を取得してください。消費税率は10%です。
出力項目はbook_id(書籍ID)とtax_included_price(税込価格)
解答・解説
SELECT book_id, price * 1.10 AS tax_included_price
FROM book_sales;
解説
このクエリは、price
に1.10を掛けて税込価格を計算し、book_id
とともに取得しています。計算結果にAS
を使用して列名(エイリアス)を付けています。
ポイント
- 四則演算(
+
,-
,*
,/
)はSELECT句内で使用できます。 -
AS
を使用して計算列にエイリアス(別名)を付けると、結果セットが見やすくなります。
問題10(比較)
総ページ数が100ページ未満の書籍一覧を取得してください。
解答・解説
SELECT *
FROM books
WHERE total_page < 100;
解説
このクエリは、total_page
が100より小さい書籍を取得します。<
演算子を使用して指定した値より小さいレコードを検索します。
ポイント
- 比較演算子:
-
<
未満 -
>
超過 -
<=
以下 -
>=
以上 -
=
等しい -
<>
等しくない
-
- 数値の比較にこれらの演算子を使用します。
問題11(否定)
定休日が月曜日ではない店舗一覧を取得してください。
解答・解説
SELECT *
FROM stores
WHERE NOT holiday = '月曜日';
または
SELECT *
FROM stores
WHERE holiday <> '月曜日';
解説
このクエリは、holiday
が「月曜日」ではない店舗を取得します。NOT
演算子や<>
演算子を使用して条件を否定しています。
ポイント
-
NOT
演算子は条件を否定します。 -
<>
は「等しくない」を意味します。 - 文字列の比較でも
<>
を使用できます。
問題12(論理演算)
発行年が2000年以上で総ページ数が200ページ以下の書籍一覧を取得してください。
解答・解説
SELECT *
FROM books
WHERE release_year >= 2000
AND total_page <= 200;
解説
このクエリは、release_year
が2000以上かつtotal_page
が200以下の書籍を取得します。AND
演算子を使用して複数の条件を組み合わせています。
ポイント
-
AND
演算子は、すべての条件がTRUE
の場合にレコードを取得します。 - 複数の条件を組み合わせることで、より細かいデータ抽出が可能です。
さいごに
今回の問題を通して、WHERE句の基本的な使い方を学びました。WHERE句はデータベースから必要な情報を抽出する際に非常に重要な役割を果たします。条件指定や絞り込みを行うことで、膨大なデータから必要なデータだけを効率的に取得することができます。
まとめ
- WHERE句:特定の条件に一致するレコードを選択するために使用します。
-
比較演算子:
=
,<>
,<
,>
,<=
,>=
などを使用して数値や文字列の比較を行います。 -
論理演算子:
AND
,OR
,NOT
を使用して複数の条件を組み合わせます。 -
NULLの扱い:
IS NULL
、IS NOT NULL
を使用してNULL値を検索します。 -
部分一致検索:
LIKE
キーワードとワイルドカード%
、_
を使用して文字列のパターンマッチングを行います。 -
範囲指定:
BETWEEN A AND B
で範囲内の値を検索します。 -
リスト内の値の検索:
IN
を使用して複数の値の中から一致するものを検索します。 -
結果の制限:
LIMIT
句を使用して取得するレコード数を制限します。
次回予告
次回は、SQL中級編のデータの集約について学びたいと思います!お楽しみに