駆け出しプログラマーの軌跡

日々の記憶(記録)を綴る

SQL文をきれいに書く(BETWEEN演算子、IN演算子)

単一カラムの範囲検索

まずは以下のようなケースを想像してみましょう。

もしあなたが、ageが21以上24以下のuserを探したいとします。
そうしたとき、ここまでで学んだ知識を使うと以下のようなSQL文を書くことが出来ます。

1
2
3
4
SELECT *
FROM users
WHERE 21 <= age AND age <= 24
-- ageが21以上かつ24以下

 ハイフンを2つ使用して-- コメントと書くと、SQL文として実行されないコメントを残すことが出来ます。

 
さて、このとき"age"という言葉を2回書いてしまっているのは少し冗長ですよね。
こういった範囲指定をする際に使える演算子があります。

 

 BETWEEN演算子

BETWEEN演算子は1つのカラムに対し上限と下限を指定して式を作り、カラムの値がその範囲に含まれるとき、その式は正になるという演算子です。

1
WHERE カラム名 BETWEEN 下限 AND 上限

 
実際に先ほどのageが21以上24以下のuserという条件を、BETWEEN演算子を使って書き直し、実行してみましょう。

 

 SequelProで以下のSQL文を実行してください

1
2
3
SELECT *
FROM users
WHERE age BETWEEN 21 AND 24

以下のように結果が表示されていれば正常にSQL文が実行出来ています。

 

単一カラムのリスト検索

今度はこういったケースを想像してみましょう。

あなたはprefectureが"東京都"もしくは"神奈川県"であるuserを探したいとします。
ここまでの知識でそれを実装しようとすると、OR演算子を使って以下のようにSQL文を書くことが出来ます。

1
2
3
SELECT *
FROM users
WHERE prefecture = "東京都" OR prefecture = "神奈川県"

このときもまた、"prefecture"という言葉を2回書いてしまっているところが冗長と言えます。
こういった場面ではリスト検索をしてあげると良いでしょう。

 

IN演算子

IN演算子は1つのカラムに対しリストを指定して、カラムの値がそのリストに含まれるとき、その式は正になるという演算子です。

1
2
WHERE カラム名 IN (1, 2, ……)
-- (値1, 値2, ……)の部分がリストとなります

ここでも実際に先ほどの、prefectureが"東京都"もしくは"神奈川県"であるuserという条件を書きなおしてみましょう。

 SequelProで以下のSQL文を実行してください

1
2
3
SELECT *
FROM users
WHERE prefecture IN ("東京都", "神奈川県")

以下のように結果が表示されていれば正常にSQL文が実行出来ています。