【SQL】WHERE句の書き方と使い方の基本
SQLのWHERE句を使い、データベースから必要なデータだけを絞り込む方法を解説します。数値の比較や複数条件の組み合わせといった基本から、文字列検索(LIKE)や範囲指定(BETWEEN)まで、様々な条件指定の書き方を具体的なサンプルコードと共に、初心者にも分かりやすく紹介します。
開発環境
- OS: Windows10
- DatabaseGUI: TablePlus
- MySQL: 8.0.42
WHERE句とは
WHERE句は、データベースからデータを取り出す際に、特定の条件に合うデータだけを絞り込むためのSQLの命令です。
データベースには、顧客情報や商品リストなど、非常に多くのデータが保存されています。 SELECT文という命令を使うと、これらのデータを取り出すことができますが、そのままではテーブルに含まれる全てのデータが取得されてしまいます。
例えば、「社員全員」ではなく「東京支社に勤務している社員だけ」の情報を知りたい場合や、「すべての商品」ではなく「価格が1000円以上の商品だけ」を一覧表示したい場合があります。
このように、「〜なデータだけを取り出したい」という絞り込みの条件を指定するのがWHERE句の役割です。 WHERE句を使うことで、膨大なデータの中から必要な情報だけを効率的に取得できるようになります。
WHERE句の基本構文
WHERE句は、テーブルからデータを取得する際に、特定の条件に一致する行(レコード)だけを絞り込むために使用します。これにより、膨大なデータの中から必要な情報だけを抽出することが可能になります。
1SELECT 2 カラム名, 3 カラム名, 4 ... 5FROM 6 テーブル名 7WHERE 8 条件式;
この構文は、以下の要素で構成されています。
SELECT カラム名: 取得したいデータの列(カラム)を指定します。FROM テーブル名: データを取得する対象のテーブルを指定します。WHERE 条件式: 取得するデータの条件を指定します。この「条件式」に当てはまる行だけが結果として返されます。例えば、「age > 20(年齢が20より大きい)」や「department = '営業部'(部署が営業部である)」といった具体的な条件を記述します。
データベースから特定の条件に合うデータを取り出すためには、WHERE句を使います。ここでは、WHERE句で利用できる様々な条件指定の方法について解説します。
サンプルコード
sql/chapter04/01.sql
比較演算子は、2つの値を比較して条件を指定する際に使用します。studentsテーブル(生徒の情報を格納したテーブル)から、特定の条件に合致する生徒のデータを取り出します。
=: 指定した値と等しいデータを検索します。!=: 指定した値と等しくないデータを検索します。>: 指定した値より大きいデータを検索します。<: 指定した値より小さいデータを検索します。>=: 指定した値以上のデータを検索します。<=: 指定した値以下のデータを検索します。
1-- 比較演算子(=, !=, >, <, >=, <=) 2-- idが5の生徒のデータを取得 3SELECT 4 * 5FROM 6 students 7WHERE 8 id = 5; 9 10-- idが5ではない生徒のデータを取得 11SELECT 12 * 13FROM 14 students 15WHERE 16 id != 5; 17 18-- idが5より大きい生徒のデータを取得 19SELECT 20 * 21FROM 22 students 23WHERE 24 id > 5; 25 26-- idが5より小さい生徒のデータを取得 27SELECT 28 * 29FROM 30 students 31WHERE 32 id < 5; 33 34-- idが5以上の生徒のデータを取得 35SELECT 36 * 37FROM 38 students 39WHERE 40 id >= 5; 41 42-- idが5以下の生徒のデータを取得 43SELECT 44 * 45FROM 46 students 47WHERE 48 id <= 5;
sql/chapter04/02.sql
論理演算子は、複数の条件を組み合わせて、より複雑な条件を指定する際に使用します。
AND: 指定した条件をすべて満たすデータを検索します。「AかつB」という意味です。OR: 指定した条件のいずれかを満たすデータを検索します。「AまたはB」という意味です。NOT: 指定した条件を満たさないデータを検索します。条件を否定する際に使います。
1-- 論理演算子(AND, OR, NOT) 2-- 1組(class_id = 1)で、かつ苗字が「田中」の生徒のデータを取得 3SELECT 4 * 5FROM 6 students 7WHERE 8 class_id = 1 9 AND last_name = '田中'; 10 11-- 1組(class_id = 1)または2組(class_id = 2)の生徒のデータを取得 12SELECT 13 * 14FROM 15 students 16WHERE 17 class_id = 1 18 OR class_id = 2; 19 20-- 1組(class_id = 1)ではない生徒のデータを取得 21SELECT 22 * 23FROM 24 students 25WHERE 26 NOT class_id = 1;
sql/chapter04/03.sql
NULLとは、データが存在しない「空の状態」を表す特別な値です。NULLかどうかを判定するには、=ではなく専用のIS NULLやIS NOT NULLを使用します。
IS NULL: 値がNULLであるデータを検索します。IS NOT NULL: 値がNULLではない(何らかの値が入っている)データを検索します。
1-- NULL判定(IS NULL, IS NOT NULL) 2-- クラスID(class_id)が設定されていない(NULL)生徒のデータを取得 3SELECT 4 * 5FROM 6 students 7WHERE 8 class_id IS NULL; 9 10-- クラスID(class_id)が設定されている(NULLではない)生徒のデータを取得 11SELECT 12 * 13FROM 14 students 15WHERE 16 class_id IS NOT NULL;
sql/chapter04/04.sql
LIKEは、文字列の一部が一致するデータを検索する際に使用します。特に、%(パーセント)という特殊な文字(ワイルドカード)と組み合わせて使うことで、柔軟な検索が可能になります。%は「0文字以上の任意の文字列」を意味します。
- 完全一致:
=と同じ働きをします。 - 前方一致: 指定した文字列で始まるデータを検索します。(例:
山%は「山田」や「山本」に一致します) - 後方一致: 指定した文字列で終わるデータを検索します。(例:
%田は「山田」や「吉田」に一致します) - 部分一致: 指定した文字列を含むデータを検索します。(例:
%田%は「山田」や「田中」に一致します)
1-- 文字列検索(LIKE) 2-- 苗字(last_name)が「山田」の生徒のデータを取得(完全一致) 3SELECT 4 * 5FROM 6 students 7WHERE 8 last_name LIKE '山田'; 9 10-- 苗字が「山」で始まる生徒のデータを取得(前方一致) 11SELECT 12 * 13FROM 14 students 15WHERE 16 last_name LIKE '山%'; 17 18-- 苗字が「田」で終わる生徒のデータを取得(後方一致) 19SELECT 20 * 21FROM 22 students 23WHERE 24 last_name LIKE '%田'; 25 26-- 苗字に「田」を含む生徒のデータを取得(部分一致) 27SELECT 28 * 29FROM 30 students 31WHERE 32 last_name LIKE '%田%';
sql/chapter04/05.sql
INやNOT INを使うと、複数の値を候補として指定できます。これは、複数のOR条件を簡潔に記述する方法です。
IN (値1, 値2, ...): カッコ内に指定した値のいずれかに一致するデータを検索します。NOT IN (値1, 値2, ...): カッコ内に指定したどの値にも一致しないデータを検索します。
1-- 複数候補を指定(IN, NOT IN) 2-- クラスID(class_id)が1または3の生徒のデータを取得 3SELECT 4 * 5FROM 6 students 7WHERE 8 class_id IN (1, 3); 9 10-- クラスIDが1でも3でもない生徒のデータを取得 11SELECT 12 * 13FROM 14 students 15WHERE 16 class_id NOT IN (1, 3);
sql/chapter04/06.sql
BETWEENを使うと、特定の範囲内にあるデータを簡単に検索できます。数値や日付の範囲を指定する際によく使われます。
BETWEEN A AND B: 値がAからBの範囲内(AとB自身も含む)であるデータを検索します。NOT BETWEEN A AND B: 値がAからBの範囲外であるデータを検索します。
1-- 範囲検索(BETWEEN) 2-- idが5から10までの生徒のデータを取得 3SELECT 4 * 5FROM 6 students 7WHERE 8 id BETWEEN 5 9 AND 10; 10 11-- idが5から10までの範囲外である生徒のデータを取得 12SELECT 13 * 14FROM 15 students 16WHERE 17 id NOT BETWEEN 5 18 AND 10;
おわりに
今回は、SQLのWHERE句を使って、データベースから必要なデータだけを絞り込む基本的な方法を解説しました。比較演算子での単純な絞り込みだけでなく、ANDやORで複数の条件を組み合わせることで、より的を絞ったデータ抽出が可能になります。さらに、LIKEによる文字列検索やBETWEENでの範囲指定など、様々な条件を使い分けることで、より複雑な要求にも応えられるようになります。WHERE句はデータ活用の基本となる重要な機能ですので、ぜひ色々な条件を試して使い方に慣れていきましょう。