かっちゃんのプログラミング奮闘記

このブログは、僕がプログラミング学習をしていく上で、知識のインプットを図るためのアウトプット場所として活用している場所です。

【SQL】 WHERE句や演算子系まとめ

今回はSQLで条件を絞ってやり取りしたい時に使用する「WHERE句」と、それに付随する演算子などについての学びのアプトプットをします。

WHERE句とは?

SELECTやDELETE時に一緒に修飾語として、条件をさらに絞って自由自在に好きな様にDBを操作することができる。

WHERE句の基本

基本的にWHEREを使用しないと処理対象の行は全ての行が対象となってしまい変更や選択をしてしまうことになるので、かなりの頻度で使用する。

また、 WHEREはデータを追加する時以外で頻繁に使用され、更新、削除、選択時にしか使用できない。追加時(INSERT)にはWHEREは使用しない。

また、記述方法として、WHEREの後ろに条件式を書いて条件を絞り込む。

 WHERE 条件式

条件式とは?

条件式とは、結果が必ず「真」or「偽」で返ってくるもののことを指す。

なので結果が「真偽」ではなく、ただの文字列だったりする場合は、WHEREは使用できない。

○この書き方はOK
WHERE 出金額 < 1000
(出金額より1000大きいか?Yes or No なので真偽が帰ってくる)

×この書き方はNG
WHERE 出金額 + 1000
(結果が、出金額+1000なので、真偽ではなく文字列が返ってくるのでこれはNG)

演算子

また、条件式を書く時は様々な演算子を用いて、いろんなパターンの条件でDBを操作する。

比較演算子

比較演算子      意味
   =      左右の値が正しい
   <      左辺は右辺より小さい
   >      左辺は右辺より大きい
   <=     左辺は右辺の値以下
   >=     左辺は右辺の値以上
   <>     左右の値が等しく無い
(<>これはRubyでは「!=」と同じ意味)

NULL

0ではなく、NULLという何も定義されていない未定義や空白を表すものがある。

NULLを判定するものがあり、NULLであることを判定するのが↓

条件式 IS NULL

NULLではないことを判定するのが↓

条件式 IS NOT NULL

LIKE演算子(部分一致検索)

LIKE演算子を使うことで、検索対象で部分的に一致しているものを選択することができる。 (〇〇を含む、この条件に当てはまるものを選択する。みたいな時に使える)

LIKE演算子では、「%」と「 _ 」を使用する。

「%」 は任意の0文字以内の文字列(何でもOK)を検索する。

なので、「%1月%」と書いてあれば、11月でも良いし、「1月1」というものでも当てはまって当てはまって選択して検索してくれる。

%%で囲っている部分に何もなくても検索してくれる。

SELECT * FROM 家計簿
 WHERE メモ LIKE '%1月%'

さらに、「 _ 」は、任意の1文字以上があるもののみ検索してくれるので、'1月_'とあった場合は、1月の後ろに何かしらの文字があるもののみ検索する。

SELECT * FROM 家計簿
 WHERE メモ LIKE '1月_'

BETWEEN演算子(範囲判定)

BETWEEN1 AND2

BETWEEN演算子では、値が「値1以上かつ値2以下」の場合に真が返ってくる。
これに当てはまらなければ偽が返ってくる。

・例(100円〜3000円に当てはまる出費のみ取得するSELECT文) ↓

SELECT *
FROM 家計簿
WHERE 出金額 BETWEEN 100 AND 3000

IN演算子

IN演算子を使うことで、複数パターンと比較することができ、複数の中で当てはまるものがあった場合に「真」を返す。

IN (値1, 値2, 値3・・・)

なので、=演算子では、1つの値としか比較できないが、IN演算子を使うことで、「値1もしくは値2に当てはまるもの」みたいな感じで複数を一度に比較し判定してくれる。

SELECT *
FROM 家計簿
WHERE 費目 IN ('食費', '交際費', '光熱費')

逆に( )で比較指定した値のどれにも当てはまらないものを抽出したいときは、「NOT IN演算子」を使用する。

SELECT *
FROM 家計簿
WHERE 費目 NOT IN ('食費', '交際費', '光熱費')

ANY / ALL演算子

比較演算子に、プラスしてさらに条件を絞って判定したい時に使用する。

ANY演算子を使うと、比較演算子の結果と比較してANYの()内の値とどれか1つでも当てはまる場合のみ、「真」を返す判定をしてくれる。

式 比較演算子 ANY (値1, 値2, 値3)

対して、ALL演算子は、比較演算子の結果と比較して、ALLの()内の値全てと当てはまる時のみ「真」を返す。

式 比較演算子 ALL (値1, 値2, 値3)

論理演算子

論理演算子を使うことで、複数の条件を組み合わせてより複雑な検索、判定を行うことができる。

中でも論理演算子の代表的なものは「AND演算子」と「OR演算子」がある。

AND演算子

2つの条件式の両方ともが真の場合のみ、判定が真となる(AかつB)

条件式1 AND 条件式2

OR演算子

対して、OR演算子は、2つの条件式のどちらかが真の場合に、真となる(AまたはB)

条件式1 OR 条件式2

・2つの条件式を組み合わせたWHERE句の例

◎買い物リストテーブルの販売店Bにある卵パックの価格を6000円に変更したい
UPDATE 買い物リスト
  SET 価格 = 6000
WHERE 食品 = '卵パック'
  AND 販売店 = 'B'

NOT演算子

真偽値を逆転させる「その条件以外のもの」を抽出

NOT 条件式
○販売店B以外の行を取り出す
WHERE NOT 販売店 = 'B'

論理演算子の優先順位

論理演算子で判定する時に、判定順番に優先順位が決められていて、①「NOT」、②「AND」、③「NOT」の順番で判定される。

なので例えば、「販売店AかBで売っているゲームかDVD」を抽出したい場合は、

SELECT *
 FROM 太郎の買い物リスト
 WHERE (販売店 = 'A' OR 販売店 = 'B'AND(カテゴリー = 'ゲーム' OR カテゴリー = 'DVD'

の様に()かっこをして先に判定して欲しいものを区切って意図的に優先順位を決めて記述する。