【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 NULLIS 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

INNOT 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句を使って、データベースから必要なデータだけを絞り込む基本的な方法を解説しました。比較演算子での単純な絞り込みだけでなく、ANDORで複数の条件を組み合わせることで、より的を絞ったデータ抽出が可能になります。さらに、LIKEによる文字列検索やBETWEENでの範囲指定など、様々な条件を使い分けることで、より複雑な要求にも応えられるようになります。WHERE句はデータ活用の基本となる重要な機能ですので、ぜひ色々な条件を試して使い方に慣れていきましょう。

【SQL】WHERE句の書き方と使い方の基本 | いっしー@Webエンジニア