SQLの勉強をしているけれど、
・データベースからデータを抽出する方法が分からない…。
・どの演算子を使えば適切なデータを抽出できるか分からない…。
こんな悩みはありませんか?そこで、この記事では、
・WHERE句を使用したデータ抽出方法
・演算子を用いた条件の指定方法
について詳しく解説します。
公開日:2023年9月28日
SQL WHERE句の役割
SQLのWHERE句の役割は、条件を指定してデータテーブルの中から必要なデータを抽出することです。例えば、特定のキーワードを含む文字列や、指定した数よりも大きい数値などの条件をWHERE句で記述できます。
データテーブル内に膨大なデータが含まれている場合であっても、WHERE句を使えば特定の条件を満たすデータを簡単に取得することが可能です。
\文字より動画で学びたいあなたへ/
Udemyで講座を探す >単一条件の指定の方法
条件を1つだけ指定してデータを抽出したい場合、次のような形でWHERE句を記述します。
1 2 3 4 |
SELECT フィールド名 FROM テーブル名 WHERE 条件式; |
例えば、以下のようなFoodという名称のテーブルから、styleの列が和食という単一条件を満たすデータを抽出するWHERE句は次の通りです。
▼Foodテーブル
1 2 3 4 5 6 7 8 9 |
number name style kcal allergens 01 うどん 和食 270 小麦 02 牛丼 和食 760 小麦、牛肉、大豆 03 親子丼 和食 640 小麦、卵、大豆、鶏肉 04 マルゲリータ イタリアン 550 小麦、卵、乳 05 カプレーゼ イタリアン 120 乳 06 麻婆豆腐 中華 350 小麦、大豆、豚肉、ごま 07 棒棒鶏 中華 200 小麦、鶏肉、大豆、ごま |
▼WHERE句の例
1 2 3 4 |
SELECT * FROM Food WHERE style = '和食'; |
フィールド名に「*」を指定すると、テーブル内の全てのフィールドを対象としてデータを抽出できます。
▼出力結果
1 2 3 4 5 |
number name style kcal allergens 01 うどん 和食 270 小麦 02 牛丼 和食 760 小麦、牛肉、大豆 03 親子丼 和食 640 小麦、卵、大豆、鶏肉 |
複数の条件の組み合わせ
2つ以上の条件を組み合わせたい場合、論理演算子のANDまたはORを用います。各演算子の役割や使い方は次の通りです。
AND演算子:複数の条件を満たすデータを抽出
複数の条件をすべて満たすデータを抽出したい場合、AND演算子を使います。例えば、先ほどのFoodテーブルの中から、styleがイタリアンでkcalが300未満のデータを抽出するWHERE句は次の通りです。
▼WHERE句の例
1 2 3 4 |
SELECT * FROM Food WHERE style = 'イタリアン' AND kcal < 300; |
▼出力結果
1 2 |
number name style kcal allergens 05 カプレーゼ イタリアン 120 乳 |
OR演算子:いずれかの条件を満たすデータを抽出
複数の条件のいずれかを満たすデータを抽出したい場合、OR演算子を使います。例えば、styleが和食または中華のデータを抽出するWHERE句は次の通りです。
▼WHERE句の例
1 2 3 4 |
SELECT * FROM Food WHERE style = '和食' OR style = '中華'; |
▼出力結果
1 2 3 4 5 6 7 |
number name style kcal allergens 01 うどん 和食 270 小麦 02 牛丼 和食 760 小麦、牛肉、大豆 03 親子丼 和食 640 小麦、卵、大豆、鶏肉 06 麻婆豆腐 中華 350 小麦、大豆、豚肉、ごま 07 棒棒鶏 中華 200 小麦、鶏肉、大豆、ごま |
比較演算子(=、<、>、<=、>=、<>、!=)の活用
比較演算子を使うと、データの一致や大小などの条件指定が可能です。比較演算子はWHERE句の中でよく用いられます。
比較演算子 | 意味 |
= | 演算子の左右の値が等しい |
< | 演算子の左の値が右の値より小さい |
> | 演算子の左の値が右の値より大きい |
<= | 演算子の左の値が右の値より小さい、または等しい |
>= | 演算子の左の値が右の値より大きい、または等しい |
<> または != | 演算子の左右の値が等しくない |
例えば、Foodテーブルでkcalが300より小さく、かつstyleが和食ではないデータを抽出するWHERE句は次の通りです。
▼WHERE句の例
1 2 3 4 |
SELECT * FROM Food WHERE kcal < 300 AND style != '和食'; |
▼出力結果
1 2 3 4 |
number name style kcal allergens 05 カプレーゼ イタリアン 120 乳 07 棒棒鶏 中華 200 小麦、鶏肉、大豆、ごま |
検索に便利な演算子
ここからは、検索条件を絞り込むために便利な「LIKE」、「BETWEEN」、「IN」、「NOT」演算子について解説します。
LIKE
LIKE演算子は特定の条件に一致する文字列を検索できる演算子です。ワイルドカードと呼ばれる特殊文字を含めてLIKE演算子を使うと、部分一致や前方一致、後方一致など細かな条件を指定できます。ワイルドカードは、0文字以上の任意の文字列を表す%と、一文字の任意の文字を表す_の2種類です。
例えば、Foodテーブルでallergensの値に「卵」を含むデータを抽出したい場合、WHERE句は次のように記述します。
▼WHERE句の例
1 2 3 4 |
SELECT * FROM Food WHERE allergens LIKE '%卵%'; |
「卵」の前後に%を付けると、allergenの値が「卵」のみの場合や「卵、ごま」、「小麦、卵」など部分一致する様々なパターンの指定が可能です。
▼出力結果
1 2 3 4 |
number name style kcal allergens 03 親子丼 和食 640 小麦、卵、大豆、鶏肉 04 マルゲリータ イタリアン 550 小麦、卵、乳 |
また、nameの値が「丼」で終わる後方一致のデータを抽出したい場合は、「丼」の前に%を付けます。
▼WHERE句の例
1 2 3 4 |
SELECT * FROM Food WHERE name LIKE '%丼'; |
▼出力結果
1 2 3 4 |
number name style kcal allergens 02 牛丼 和食 760 小麦、牛肉、大豆 03 親子丼 和食 640 小麦、卵、大豆、鶏肉 |
BETWEEN演算子:範囲の指定
BETWEEN演算子を使うと、最小値と最大値を指定し、それらの範囲内にあるデータを抽出できます。例えば、Foodテーブルのkcalが200から400の間にあるデータを抽出するWHERE句は次の通りです。
▼WHERE句の例
1 2 3 4 |
SELECT * FROM Food WHERE name BETWEEN 200 AND 400; |
▼出力結果
1 2 3 4 5 |
number name style kcal allergens 01 うどん 和食 270 小麦 06 麻婆豆腐 中華 350 小麦、大豆、豚肉、ごま 07 棒棒鶏 中華 200 小麦、鶏肉、大豆、ごま |
IN演算子:値の指定
IN演算子は、指定した複数の値のいずれかに一致するデータを抽出できる演算子です。IN演算子を使うと、複数の条件を満たすデータを効率的に抽出できます。
例えば、Foodテーブルでnumberの値が03、05、07のデータを抽出するWHERE句は次の通りです。
▼WHERE句の例
1 2 3 4 |
SELECT * FROM Food WHERE number IN (03, 05, 07); |
▼出力結果
1 2 3 4 5 |
number name style kcal allergens 03 親子丼 和食 640 小麦、卵、大豆、鶏肉 05 カプレーゼ イタリアン 120 乳 07 棒棒鶏 中華 200 小麦、鶏肉、大豆、ごま |
NOT演算子:指定した条件でないデータを抽出
NOT演算子を使うと、指定した条件にあてはまらないデータを抽出できます。ほかの演算子とNOT演算子の組み合わせにより、複雑な条件を指定することが可能です。
例えば、次のようなWHERE句を記述すると、Foodテーブルのallergensに卵を含まないデータを抽出できます。
▼WHERE句の例
1 2 3 4 |
SELECT * FROM Food WHERE allergens NOT LIKE '%卵%'; |
▼出力結果
1 2 3 4 5 6 7 |
number name style kcal allergens 01 うどん 和食 270 小麦 02 牛丼 和食 760 小麦、牛肉、大豆 05 カプレーゼ イタリアン 120 乳 06 麻婆豆腐 中華 350 小麦、大豆、豚肉、ごま 07 棒棒鶏 中華 200 小麦、鶏肉、大豆、ごま |
NULL値の取り扱い
SQLにおいて、値が存在しない場合や不明な場合はNULLと呼ばれる特別な値で表されます。例えば、下記のようなCustomerテーブルで、値が存在しないデータにはNULL値が割り当てられます。
▼Customerテーブル
1 2 3 4 5 |
number name mail 01 田中一美 tanaka@xxxx.co.jp 02 木村二郎 jiro@samplesample.com 03 高橋三子 NULL |
これは、3番目の高橋三子さんのメールアドレスが不明な場合を表す例です。
IS NULL:NULLの指定
NULL値を含むデータを抽出したい場合、IS NULLという特別な演算子を使います。例えば、CustomerテーブルでmailがNULLのデータを抽出するWHERE句の書き方は次の通りです。
▼WHERE句の例
1 2 3 4 |
SELECT * FROM Customer WHERE mail IS NUL; |
mailの値がNULLの場合に条件が真(TRUE)となり、次のような結果が出力されます。
▼出力結果
1 2 3 |
number name style kcal allergens 03 高橋三子 NULL |
IS NOT NULL:NULL以外の指定
IS NOT NULLという演算子を使うと、NULL値を含まないデータを抽出できます。例えば、CustomerテーブルでmailがNULLではないデータを抽出するWHERE句は次の通りです。
▼WHERE句の例
1 2 3 4 |
SELECT * FROM Customer WHERE mail IS NOT NUL; |
mailの値がNULLではない場合に条件が真(TRUE)となり、次のような結果が出力されます。
▼出力結果
1 2 3 4 |
number name style kcal allergens 01 田中一美 tanaka@xxxx.co.jp 02 木村二郎 jiro@samplesample.com |
まとめ
SQLのWHERE句を使うと、様々な条件を指定し、必要なデータを抽出することが可能です。WHERE句には複数の演算子があり、値の大小関係や文字列の一致、複数条件の組み合わせなどを表現できます。WHERE句の記述方法を学び、データベースの検索に役立てましょう。
SQLのWHERE句を詳しく知りたい人には、下記の講座がおすすめです。
【SQL】未経験者もこれ一本でOK!MySQLで学ぶ「SQL」「データベース基礎」講座【プログラミング初心者向け】
完全未経験でも安心!MySQLを使って「SQL」「データベース基礎」をゼロから学べます。累計登録者数25,000人超のウズウズカレッジが、“絶対挫折させない”を目標に作った講座です。豊富な図解と丁寧な解説で基礎から実践までマスターできます。
\無料でプレビューをチェック!/
講座を見てみるレビューの一部をご紹介
評価:★★★★★
画面だけではなく、後で見返せることができる教材(PDF)も充実しているので、不明なところももあとあと読み返して理解できます。
評価:★★★★★
循環に受講し3講座目が終了しました。全くの素人ですが,丁寧に解説してくれており時間さえ作れれば継続できるかと思います。続けて受講したいと思います。
データベースのプログラム言語を習得して、業務効率化に取り組みましょう!
最新情報・キャンペーン情報発信中