こんにちは!SQL学習の旅へようこそ。前回までは基本的なSELECT文やWHERE句の使い方を学びましたね。今回は、より柔軟な条件でデータを検索するための強力な武器、LIKE、BETWEEN、IN演算子について学んでいきましょう! これらを使いこなせれば、欲しいデータをピンポイントで見つけ出すスキルが格段にアップしますよ
あいまい検索の達人! LIKE演算子
「特定の文字で始まる名前を探したい」「メールアドレスに特定のドメインが含まれているか確認したい」…そんな時に活躍するのがLIKE演算子です。LIKEは、文字列の一部が一致するデータを検索する「あいまい検索」を行います。
LIKE演算子では、特別な意味を持つ「ワイルドカード」という文字を使います。
| ワイルドカード | 意味 | 例 | 説明 |
|---|---|---|---|
% (パーセント) | 任意の0文字以上の文字列 | 'A%' | ‘A’で始まる文字列 (例: ‘Apple’, ‘Agent’, ‘A’) |
_ (アンダースコア) | 任意の一文字 | 'T_m' | ‘T’で始まり、’m’で終わる3文字の文字列 (例: ‘Tim’, ‘Tom’) |
具体的な使い方を見てみましょう。例えば、usersテーブルから名前に「o」が含まれるユーザーを探したい場合は、次のように書きます。
SELECT name, email
FROM users
WHERE name LIKE '%o%'; ワイルドカードの組み合わせで、様々な条件を指定できます。
- 前方一致:
'Sato%'(「Sato」で始まる) - 後方一致:
'%gmail.com'(「gmail.com」で終わる) - 特定の文字数:
'____'(ちょうど4文字)
注意点: %や_自体を検索したい場合は、エスケープ文字(通常は\ですが、RDBMSによって異なる場合があります)を使います。例えば、'10%'という文字そのものを検索したい場合、WHERE column LIKE '10\%' ESCAPE '\'のように書くことがあります。(使用しているデータベースのマニュアルを確認してくださいね!)
範囲指定ならおまかせ! BETWEEN演算子
「価格が1000円以上5000円以下の商品を探したい」「特定の期間に登録したユーザーを抽出したい」…そんな時に便利なのがBETWEEN演算子です。BETWEENは、指定した2つの値の間の範囲(指定した値を含む)にあるデータを検索します。
構文はシンプルです: WHERE column BETWEEN 値1 AND 値2
数値だけでなく、日付や文字列にも使えます。
例を見てみましょう。productsテーブルから価格(price)が1000円から5000円の商品を検索します。
SELECT product_name, price
FROM products
WHERE price BETWEEN 1000 AND 5000; これは、WHERE price >= 1000 AND price <= 5000 と書くのと同じ意味ですが、BETWEENを使うとより直感的で分かりやすいですね!
日付の場合も同様です。2024年1月1日から2024年3月31日までに登録したユーザーを検索するには、次のようにします。(日付の形式はデータベースによって異なります)
SELECT user_id, registration_date
FROM users
WHERE registration_date BETWEEN '2024-01-01' AND '2024-03-31'; 範囲外を指定したい場合: NOT BETWEEN を使うと、指定した範囲”外”のデータを検索できます。例えば、価格が1000円未満または5000円を超える商品を探す場合は WHERE price NOT BETWEEN 1000 AND 5000 と書きます。
複数の値をまとめて指定! IN演算子
「特定の部署(’Sales’, ‘Marketing’, ‘IT’)に所属する社員を探したい」「IDが1, 5, 10のユーザー情報を取得したい」…このように、複数の候補値のいずれかに一致するデータを検索したい場合に便利なのがIN演算子です。
IN演算子は、括弧()の中に候補となる値をカンマ,で区切って指定します。
構文: WHERE column IN (値1, 値2, 値3, ...)
例えば、employeesテーブルから部署(department)が’Sales’または’Marketing’の社員を検索します。
SELECT employee_name, department
FROM employees
WHERE department IN ('Sales', 'Marketing'); これは、WHERE department = 'Sales' OR department = 'Marketing' と書くのと同じ意味です。OR をたくさん繋げるよりも、INを使った方がコードがすっきりして読みやすくなりますね!
候補に含まれないデータを指定したい場合: NOT IN を使うと、指定した候補値のいずれにも一致”しない”データを検索できます。例えば、’Sales’でも’Marketing’でもない部署の社員を探す場合は WHERE department NOT IN ('Sales', 'Marketing') と書きます。
NULLの扱いに注意: INリストの中にNULLが含まれていても、カラムの値がNULLの行はヒットしません。同様に、NOT INリストにNULLが含まれている場合、期待通りの結果にならないことがあります(カラムがNULLの行も除外されない場合があります)。NULLを扱う場合はIS NULLやIS NOT NULLを使いましょう。
まとめ
今回は、SQLでの検索能力をさらに高めるためのLIKE、BETWEEN、IN演算子を学びました。
- LIKE: 文字列の部分一致(あいまい検索)に使おう!
%と_のワイルドカードが鍵。 - BETWEEN: 数値、日付、文字列の範囲指定に便利!
値1 AND 値2の両端を含む。 - IN: 複数の候補値のいずれかに一致するかを調べたい時に!
ORの繰り返しを避けられる。
これらの演算子をマスターすれば、より複雑な条件でデータを絞り込むことができるようになります。ぜひ実際に手を動かして、色々なパターンを試してみてくださいね!
次回は、データを集計するための関数(COUNT, SUM, AVGなど)について学びます。お楽しみに!