1から始めるPythonデータ分析 - やりたいこと逆引きリスト ▶︎▶︎

【SQL】WHERE句|条件を設定する6つの方法

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
SQLのWHERE句のデータ説明

② BETWEEN(〇〇と〇〇の間)

BETWEEN(ビトウィーン)

の間に、…の中間で、…の両方の性質を兼ねた、…ないし、…の間で、…のどちらかを、…やら…やらで

Weblio英和辞書

BETWEENは英単語と同様に「間に」という意味です

条件の範囲を選択したい場合は「BETWEEN」を使いましょう

2つの条件を「AND」でつなげます

WHERE 【列名】 BETWEEN 〇〇 AND 〇〇

※「BETWEEN」では前後の条件を含んだ抽出となります

お題

会計が3,000円以上、5,000円未満のデータ」を抽出するSQLを記述します

WHERE
    会計 BETWEEN 3000 AND 5000
SQLのWHERE句のデータ説明
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
SQLのWHERE句のデータ説明

平均点が変わってくる!?

鈴木さんの数値が「0」の場合と「NULL」の場合で、平均が変わってきます

数値が存在するのかどうか確認する必要があります

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')
SQLのWHERE句のデータ説明
WHERE
    商品名 = 'ABC-01'
    OR
    商品名 = 'ABC-02'

⑤ AND / OR(複数の条件を指定)

WHERE句では「AND」と「OR」を使って、複数の条件を設定することができます

イメージを見てみましょう

ANDとORの説明

2つ以上の条件があったときに

どちらも当てはまる場合が「AND

どちらかに当てはまる場合が「OR

の設定になります

WHERE 【列名】= 〇〇 AND【列名】= 〇〇

WHERE 【列名】= 〇〇 OR【列名】= 〇〇

実際に設定した例を見ながら「AND」と「OR」の違いを見ていきます

お題

まずは「商品名が ‘XYZ-01’に当てはまるデータ」と「会計が4,000円以上に当てはまるデータ」をAND条件で抽出するSQLを記述します

WHERE
    商品名 = 'XYZ-01'
    AND
    会計 >= 4000
SQLのWHERE句のデータ説明

お題

続いて「商品名が ‘XYZ-01’に当てはまるデータ」と「会計が4,000円以上に当てはまるデータ」をOR条件で記載してみます

WHERE
    商品名 = 'XYZ-01'
    OR
    会計 >= 4000
SQLのWHERE句のデータ説明
このSQLの間違いに気づきますか!?
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種類あります

  1. 」ゼロ文字以上の文字列はなんでもOK
  2. _ 」任意の1文字だけなんでもOK
商品名LIKE ‘ABC%LIKE ‘ABC_
ABC
ABCD
ABC-01
01-ABC
お題

商品名に ‘-01’ が含まれるデータ」を抽出するSQLを記述します

WHERE
    商品名 LIKE '%-01'
SQLのWHERE句のデータ説明

まとめ

今回は「条件を設定」できる「WHERE句」についてご紹介しました

データの数が大量になるほど、条件を付けて抽出することが求められてきますので、ぜひ使いこなしてください

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です