[SQLのはじめ方] Part8: LIKE, BETWEEN, INによる検索

SQL

こんにちは!SQL学習の旅へようこそ。前回までは基本的なSELECT文やWHERE句の使い方を学びましたね。今回は、より柔軟な条件でデータを検索するための強力な武器、LIKEBETWEENIN演算子について学んでいきましょう! これらを使いこなせれば、欲しいデータをピンポイントで見つけ出すスキルが格段にアップしますよ💪

あいまい検索の達人! 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 NULLIS NOT NULLを使いましょう。

まとめ

今回は、SQLでの検索能力をさらに高めるためのLIKEBETWEENIN演算子を学びました。

  • LIKE: 文字列の部分一致(あいまい検索)に使おう! %_ のワイルドカードが鍵。
  • BETWEEN: 数値、日付、文字列の範囲指定に便利! 値1 AND 値2 の両端を含む。
  • IN: 複数の候補値のいずれかに一致するかを調べたい時に! ORの繰り返しを避けられる。

これらの演算子をマスターすれば、より複雑な条件でデータを絞り込むことができるようになります。ぜひ実際に手を動かして、色々なパターンを試してみてくださいね!

次回は、データを集計するための関数(COUNT, SUM, AVGなど)について学びます。お楽しみに!🚀

コメント

タイトルとURLをコピーしました