WHERE句は、テーブルの検索条件を指定する構文で、SQL構文の中でも使用頻度が高めです。本記事では、SQLのWHERE句の使い方と構文について解説します。
WHERE句とは、テーブルの検索条件を指定するための構文です。比較的使用頻度が高く、MySQLやPostgreSQLなどのデータベースを扱う際によく目にすることとなるでしょう。
そこで、SQL初心者に向けてWHERE句の使い方と構文について解説します。
目次
SQLはSELECT文でデータを抽出できますが、SELECT文だけでは指定したテーブルの全てのデータが抽出されてしまいます。そこで、条件を指定し、必要なデータだけ抽出したい場合に使われるのがWHERE句です。
WHERE句の性質上、SELECT文と組み合わせることが多くあり、データの更新対象を指定したい場合はUPDATE文と組み合わせることも可能です。
検索条件の設定は、データの数が多ければ多いほど必要となるため、うまく使いこなすことができれば膨大なデータを扱うことも可能となるでしょう。
WHERE句で検索条件を指定する際、さまざまな比較演算子が用いられます。基本的な比較演算子は以下の通りです。
比較演算子 | 意味 | 使用例 | 結果 |
---|---|---|---|
= | 等しい | id = 5 | idが5のデータのみ抽出されます |
> | 大きい | id > 5 | idが5より大きいデータが全て抽出されます |
< | 小さい | id < 5 | idが5より小さいデータが全て抽出されます |
>= | 以上 | id >= 5 | idが5以上のデータが全て抽出されます |
<= | 以下 | id <= 5 | idが5以下のデータが全て抽出されます |
!= | 等しくない | id != 5 | idが5ではないデータが全て抽出されます |
基本的な比較演算子は、値の大小を比較し、その結果を抽出したい場合によく使われます。簡単に使用できますが、基本的な比較演算子だけでは複数の条件を指定できません。そのため、複数条件を指定してデータを抽出したい場合は後述する応用の演算子を使いましょう。
複数の条件を指定したい場合は、以下のような応用の演算子を使用します。
演算子 | 意味 |
---|---|
AND | AかつB |
OR | AまたはB |
BETWEEN | A以上B以下 |
IN | いずれかを含む |
LIKE | 文字列のパターンマッチ |
応用的な演算子を使い、複数の条件を指定することでさらに詳細なデータ抽出が可能です。それぞれの演算子が具体的にどのように使用されるのか、実際のコードと併せて見ていきましょう。
AND演算子は、2つの条件をどちらも満たすデータを抽出したい場合に使用します。たとえば「条件A AND 条件B」と記述した場合、「条件Aかつ条件B」のデータが抽出対象ですので、2つの条件を満たすデータを検索したい場合に活用しましょう。
また、「条件A AND 条件B AND 条件C」のように、ANDを2つ以上使用しても問題ありません。このように記述すればさらに複数のデータを拾うことができます。
OR演算子は、2つの条件のうちどちらか片方を満たすデータを抽出したい場合に使用します。たとえば「条件A OR 条件B」と記述した場合、「条件Aまたは条件B」のデータが抽出対象ですので、どちらかの条件を満たすデータを検索したい場合に活用しましょう。
なお、ANDの場合と同様に、ORも2つ以上使用できます。「条件A OR 条件B OR 条件C」のように記述すれば、条件A、条件B、条件Cいずれかの条件を満たすデータを抽出可能です。
BETWEEN演算子は、AからBなど範囲を指定して検索したい場合に使用します。たとえば「BETWEEN 条件A AND 条件B」と記述した場合、条件Aから条件Bまでの範囲のデータが抽出対象です。
AからBまでということは、 A以上B以下という定義と同じといえます。そのため、BETWEENを使わず「>=」や「<=」を使用しても記述できますが、条件がわかりづらくなってしまうため、基本的にはBETWEENを使用がおすすめです。
IN演算子は、複数の条件を指定し、いずれかの条件に合致するデータを検索したい場合に使用します。たとえば「IN (条件A, 条件B, 条件C)」と記述した場合、条件Aまたは条件Bまたは条件Cを満たすデータが抽出対象です。
処理としては「条件A OR 条件B OR 条件C」と同様です。しかし、ORを何度も使うと判読しづらいため、複数の条件のいずれかに合致するデータを検索する際はOR演算子ではなくIN演算子を使用するとよいでしょう。
LIKE演算子は、特定の文字列を含むデータを検索したい場合に使用します。たとえば「LIKE ‘テスト%’」とした場合、テストから始まる文字列、「LIKE ‘%テスト%’」とした場合、テストを含む文字列が抽出対象です。
LIKEで使用している「%」はワイルドカードと呼ばれるもので、ほかに「_」などがあります。使いこなせればさまざまな文字列を検索できるようになるため、重要なものは覚えておくことをおすすめします。
なお、LIKEを使った文字列の検索は処理が早くないため、膨大なデータの検索にはあまり向いていません。
SQLでWHERE句を使う際は「抽出条件」の記載が必要です。先述した比較演算子を使い条件を記述していきます。ここでは、以下のようにWHERE句を使って検索する方法について解説します。
なお、解説の際は以下のテーブルを使用します。
sample
id | date | name |
---|---|---|
1 | 01-20 | Tanaka |
2 | 03-03 | Takahashi |
3 | 07-17 | Satou |
4 | 11-23 | Yamamoto |
5 | 12-30 | Kimura |
WHERE句を使ってデータを検索する場合は、WHERE句の後に条件式を指定しましょう。条件式を指定することで、その条件に合ったデータのみを抽出できます。基本的な演算子を使用したコードは以下の通りです。
SELECT * FROM sample
WHERE id <= 3;
このコードの場合、idが3以下のデータが抽出されるため、実行すると以下のように表示されます。
id | date | name |
---|---|---|
1 | 01-20 | Tanaka |
2 | 03-03 | Takahashi |
3 | 07-17 | Satou |
また、以下のようにNOT演算子を使って条件を否定することも可能です。NOT演算子を使う場合は条件式を括弧で囲みましょう。
SELECT * FROM sample
WHERE NOT (id <= 3);
このコードの場合、idが3以下ではないデータが抽出されるため、実行すると以下のように表示されます。
id | date | name |
---|---|---|
4 | 11-23 | Yamamoto |
5 | 12-30 | Kimura |
AND句を使う場合の構文は「SELECT * FROM テーブル WHERE 条件A AND 条件B」となり、実際のコードは以下の通りです。
SELECT * FROM sample
WHERE id <= 3 AND id > 1;
このコードの場合、idが3以下かつidが1より大きいデータが抽出されるため、実行すると以下のように表示されます。
id | date | name |
---|---|---|
2 | 03-03 | Takahashi |
3 | 07-17 | Satou |
また、以下のように複数のANDを使用して条件式を増やすことも可能です。
SELECT * FROM sample
WHERE id <= 3 AND id > 1 AND name = Takahashi;
このコードの場合、「idが3以下」「idが1より大きい」「nameがTakahashi」の全てを満たすデータが抽出されます。
id | date | name |
---|---|---|
2 | 03-03 | Takahashi |
OR句を使う場合の構文は「SELECT * FROM テーブル WHERE 条件A OR 条件B」となり、実際のコードは以下の通りです。
SELECT * FROM sample
WHERE id <= 3 OR id = 5;
このコードの場合、idが3以下またはidが5のデータが抽出されるため、実行すると以下のように表示されます。
id | date | name |
---|---|---|
1 | 01-20 | Tanaka |
2 | 03-03 | Takahashi |
3 | 07-17 | Satou |
5 | 12-30 | Kimura |
OR句も、ANDの場合と同様に複数のORを使用して条件式を増やすことが可能です。
SELECT * FROM sample
WHERE id <= 3 OR id = 5 OR name = Yamamoto;
このコードの場合、idが3以下、idが5、nameがYamamotoのいずれかの条件を満たすデータが抽出されます。
id | date | name |
---|---|---|
1 | 01-20 | Tanaka |
2 | 03-03 | Takahashi |
3 | 07-17 | Satou |
4 | 11-23 | Yamamoto |
5 | 12-30 | Kimura |
ANDとORは両方使用することも可能です。これらを併用することで、複数の条件を指定して検索できます。ANDとORを併用する場合の構文は「SELECT * FROM テーブル WHERE 条件A AND 条件B OR 条件C」となり、実際のコードは以下の通りです。
SELECT * FROM sample
WHERE id <= 3 AND id > 1 OR name = Yamamoto;
このコードの場合、idが3以下かつ1より大きい、またはnameがYamamotoのデータが抽出されるため、実行すると以下のように表示されます。
id | date | name |
---|---|---|
2 | 03-03 | Takahashi |
3 | 07-17 | Satou |
4 | 11-23 | Yamamoto |
ANDとORを併用する場合、両者は優先順位が違うため、記述した順番にかかわらずANDが先に実行されます。ORを先に実行させたい場合は、以下のようにORを使用した条件式を括弧で囲みましょう。
SELECT * FROM sample
WHERE id <= 3 AND (id > 1 OR name = Yamamoto);
このコードの場合、idが1より大きいまたはnameがYamamoto、かつidが3以下のデータが抽出されます。
id | date | name |
---|---|---|
2 | 03-03 | Takahashi |
3 | 07-17 | Satou |
このように、同じ式であっても実行される順番によって結果が変わるため、複数の条件式を組み合わせる場合は括弧を使うことを意識するとよいでしょう。
次に、WHERE句の応用的な使い方について解説します。今回紹介する使い方は以下の通りです。
それぞれ詳しく解説します。
BETWEEN演算子を使用することで、範囲内に含まれているデータを抽出できます。構文は「SELECT * FROM テーブル WHERE 対象値 BETWEEN 条件A AND 条件B」となり、実際のコードは以下の通りです。
SELECT * FROM sample
WHERE id BETWEEN 2 AND 4;
このコードの場合、idが2から4までのデータが抽出されるため、以下のように表示されます。
id | date | name |
---|---|---|
2 | 03-03 | Takahashi |
3 | 07-17 | Satou |
4 | 11-23 | Yamamoto |
BETWEENを使った条件式は「id >= 2 AND id <= 4」のようにANDを使用しても同様の処理が可能です。しかし、BETWEENを使ったほうが可読性に優れているため、範囲指定したい場合は基本的にBETWEENを使うことをおすすめします。
また、上記の条件式からもわかるように、BETWEENは指定した値を含みます。「id > 2 AND id < 4」をBETWEENで記述したい場合は「WHERE id BETWEEN 2+1 AND 4-1;」のように記述しましょう。
LIKE演算子を使うことで、いずれかの条件に一致する文字列を検索できます。ただし、LIKE演算子だけでは完全に一致する条件しか検索できません。そこで「%」や「_」などのワイルドカードと呼ばれる文字を使用することで検索可能です。「%」は任意の文字列、「_」は任意の1文字が含まれる条件を追加できます。
構文は「SELECT * FROM テーブル WHERE 対象値 条件A」となり、実際のコードは以下の通りです。
SELECT * FROM sample
WHERE name LIKE ’Ta%’;
このコードの場合、nameの「Ta」から始まるデータが抽出されるため、以下のように表示されます。
id | date | name |
---|---|---|
1 | 01-20 | Tanaka |
2 | 03-03 | Takahashi |
IN演算子は、いずれかの条件に一致するデータを検索できます。構文は「SELECT * FROM テーブル WHERE 対象値 IN (条件A, 条件B, 条件C…)」となり、実際のコードは以下の通りです。
SELECT * FROM sample
WHERE id IN (1, 3, 5);
このコードの場合、idが1,3,5のいずれかと一致するデータが抽出されるため、以下のように表示されます。
id | date | name |
---|---|---|
1 | 01-20 | Tanaka |
3 | 07-17 | Satou |
5 | 12-30 | Kimura |
また、NOTを使えば指定した値以外のデータを抽出することも可能です。たとえば「WHERE id NOT IN (1, 3, 5);」とした場合、idが1,3,5,以外、すなわちidが2,4のデータが抽出されます。
プログラミングやデータベースにおいて、NULLは何のデータも含まれていない、無効な値を表します。そのため、通常の値のように比較演算子を使って検索することはできません。
NULLを検索する場合はIS NULL演算子を使いましょう。今回は以下のテーブルを使用します。
sample
id | date | name |
---|---|---|
1 | 01-20 | Tanaka |
2 | NULL | Takahashi |
3 | 07-17 | Satou |
4 | 11-23 | Yamamoto |
5 | NULL | Kimura |
構文は「SELECT * FROM テーブル WHERE 対象値 IS NULL」となり、実際のコードは以下の通りです。
SELECT * FROM sample
WHERE date IS NULL;
このコードの場合、dateがNULLのデータが抽出されるため、以下のように表示されます。
id | date | name |
---|---|---|
2 | NULL | Takahashi |
5 | NULL | Kimura |
また、「WHERE date IS NOT NULL;」のようにNOTを使えばNULLではないデータを検索することも可能です。この場合は以下のように表示されます。
id | date | name |
---|---|---|
1 | 01-20 | Tanaka |
3 | 07-17 | Satou |
4 | 11-23 | Yamamoto |
本記事では、SQLのWHERE句の使い方と構文について解説しました。WHERE句にはさまざまな演算子があり、ANDやORを組み合わせれば複数の条件を指定することが可能です。
演算子ごとに記述方法にはやや違いがありますが構文自体は短いので、使いこなすことはそう難しくはないでしょう。WHERE句を使用すれば、膨大なデータが保存されたデータベースから任意のデータを簡単に検索できるため、ぜひ積極的に活用してみてください。
2024.06.17
子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介
#プログラミングスクール
2022.01.06
【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説
#プログラミングスクール
2024.01.26
【未経験でも転職可】30代におすすめプログラミングスクール8選!
#プログラミングスクール
2024.01.26
初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説
#JAVA
2024.01.26
忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説
#プログラミングスクール
2022.01.06
【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介
#プログラミングスクール
2024.01.26
【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説
#プログラミングスクール
2024.01.26
【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説
#プログラミングスクール