目次
WHERE句とは?
WHERE(ホウェア)
どこに、どんな点で、どういう立場で、…する、…した(場所、場合など)、そしてそこに、…する所
Weblio英和辞書
WHEREは「どこ」という疑問詞です
しかしSQLでは「条件」を意味するのがWHEREになります
一般の英語の意味とSQLの英語とで意味が大きく異なっていますね
データを抽出する際にすべての行を抽出するのではなく、
指定した条件のみを抽出したい時に使います
「●●」という商品名の販売地域が知りたい
12/1~12/7に発生した売上の合計が知りたい
女性が購入した商品名が知りたい
WHERE句の使い方
SELECT ***
FROM ***
WHERE【条件式を記載】
WHERE句はSQLでは「任意」の指定になります
ビッグデータを扱うことの多いSQLでは、WHERE句なしで抽出することはほとんどないので必ず覚えましょう
WHERE句には「抽出条件」を記載します
比較演算を使い条件の記述をする必要があります
簡単な指定から複雑な指定まであるので、それぞれご説明します
条件を設定する方法
① 比較演算子
基本的なSQLはこの比較演算子だけで、ほとんどのデータを抽出することができます
代表的な比較演算子を記載します
演算子 | 概要 | 例 |
---|---|---|
= | 等しい | 年齢 = 30 |
> | より大きい | 年齢 > 30 |
< | 未満 | 年齢 < 30 |
>= | 以上 | 年齢 >= 30 |
<= | 以下 | 年齢 <= 30 |
<> | 等しくない | 年齢 <> 30 |
!= | 等しくない | 年齢 != 30 |
=(イコール)や><(大なり・小なり)の比較は簡単にイメージできると思います
また大なり・小なりにイコールを組み合わせて、「以上、以下」と条件設定することができます
またプログラミング言語っぽいのが「<>」「!=」ですが、「等しくない」に該当します
※「≠」ではないのでご注意ください
「会計が3,000円以上のデータ」を抽出するSQLを記述する
WHERE
会計 >= 3000
② BETWEEN(〇〇と〇〇の間)
BETWEEN(ビトウィーン)
の間に、…の中間で、…の両方の性質を兼ねた、…ないし、…の間で、…のどちらかを、…やら…やらで
Weblio英和辞書
BETWEENは英単語と同様に「間に」という意味です
条件の範囲を選択したい場合は「BETWEEN」を使いましょう
2つの条件を「AND」でつなげます
WHERE 【列名】 BETWEEN 〇〇 AND 〇〇
※「BETWEEN」では前後の条件を含んだ抽出となります
「会計が3,000円以上、5,000円未満のデータ」を抽出するSQLを記述します
WHERE
会計 BETWEEN 3000 AND 5000
WHERE
会計 >= 3000
AND
会計 <= 5000
③ NULL(データが無いを指定)
NULL(ヌル)
(法律上)無効の、価値のない、ゼロの、零の
Weblio英和辞書
普段使わない英単語で、プログラミング言語でよく聞く単語が「NULL」です
「ヌル」と呼び、「データが無い(欠損)」ことを指します
NULLは「0」とは違い、そもそもデータが存在しません
またNULLの指定(もしくは指定しない)方法は、若干分かりにくい
WHERE 【列名】 IS NULL
WHERE 【列名】 IS NOT NULL
注意点としては「=(イコール)」ではなく「IS / IS NOT」でNULLを指定する必要がある点です
「ユーザー名が無いデータ」を抽出するSQLを記述します
WHERE
ユーザー名 IS NULL
鈴木さんの数値が「0」の場合と「NULL」の場合で、平均が変わってきます
数値が存在するのかどうか確認する必要があります
④ IN句(複数の項目を指定)
IN(イン)
…の中に、…において、…で、…の方に、に乗って、…に、…の状態に、…の中で、…して、…に従事して
Weblio英和辞書
INとはご存知の通り「〇〇の中に」という意味です
SQLでは複数項目の指定の際にIN句を使うことで
「中にある条件を満たす」という抽出をすることができます
IN句は抽出条件が多い時に利用します
WHERE 【列名】IN (’A’,’B’,’C’…)
「=」を使う部分に「IN」を記載します
()カッコを続けることで、()カッコ内にある値に当てはまる条件を設定できます
「商品名 ‘ABC-01’ と ‘ABC-02’ に当てはまるデータ」を抽出するSQLを記述します
WHERE
商品名 IN ('ABC-01','ABC-02')
WHERE
商品名 = 'ABC-01'
OR
商品名 = 'ABC-02'
⑤ AND / OR(複数の条件を指定)
WHERE句では「AND」と「OR」を使って、複数の条件を設定することができます
イメージを見てみましょう
2つ以上の条件があったときに
どちらも当てはまる場合が「AND」
どちらかに当てはまる場合が「OR」
の設定になります
WHERE 【列名】= 〇〇 AND【列名】= 〇〇
WHERE 【列名】= 〇〇 OR【列名】= 〇〇
実際に設定した例を見ながら「AND」と「OR」の違いを見ていきます
まずは「商品名が ‘XYZ-01’に当てはまるデータ」と「会計が4,000円以上に当てはまるデータ」をAND条件で抽出するSQLを記述します
WHERE
商品名 = 'XYZ-01'
AND
会計 >= 4000
続いて「商品名が ‘XYZ-01’に当てはまるデータ」と「会計が4,000円以上に当てはまるデータ」をOR条件で記載してみます
WHERE
商品名 = 'XYZ-01'
OR
会計 >= 4000
WHERE
商品名 = 'ABC-01'
AND
商品名 = 'XYZ-01'
商品名「ABC-01」と「XYZ-01」のどちらかを購買したデータを抽出しているように見えますが…これは誤りです!
WHERE句の条件は「それぞれの行」に対して行います
つまり上記SQLでは、商品名が「ABC-01」で更に「XYZ-01」であるデータを抽出する条件なので、そんな商品名はなくエラーになります
WHERE
商品名 = 'ABC-01'
OR
商品名 = 'XYZ-01'
------------------------------------
WHERE
商品名 IN ('ABC-01','XYZ-01')
⑥ LIKE(あいまい条件を設定)
LIKE(ライク)
(…を)好む,(…が)好きである
(外見・量など)同様な、類似の、似ていて
Weblio英和辞書
LIKEは動詞では「好き」という意味ですが、前置詞/形容詞として「同様の・似ている」という意味があります
「LIKE」を使ってあいまい条件を設定することができます
このあいまい条件は「部分一致」とも呼ばれています
- 商品名に「01」を含むデータを抽出する
- ユーザー名の名字が「高橋」さんの名前を抽出する
- ウェブサイト「www.smart-hint.com/sql」の配下に含まれるURLを全て抽出する
「=」の部分を「LIKE」に入れ替え、条件指定する値に「ワイルドカード」を設定します
ワイルドカードには2種類あります
- 「 % 」ゼロ文字以上の文字列はなんでもOK
- 「 _ 」任意の1文字だけなんでもOK
商品名 | LIKE ‘ABC%‘ | LIKE ‘ABC_‘ |
---|---|---|
ABC | 〇 | 〇 |
ABCD | 〇 | 〇 |
ABC-01 | 〇 | ✖ |
01-ABC | ✖ | ✖ |
「商品名に ‘-01’ が含まれるデータ」を抽出するSQLを記述します
WHERE
商品名 LIKE '%-01'
まとめ
今回は「条件を設定」できる「WHERE句」についてご紹介しました
データの数が大量になるほど、条件を付けて抽出することが求められてきますので、ぜひ使いこなしてください