【初心者向け】MySQLのIN句とBETWEEN句で範囲検索をマスターしよう
MySQLにおける「IN」句と範囲検索
BETWEEN句を使う
BETWEEN 句は、列の値が指定した範囲内にあるかどうかを調べます。構文は以下の通りです。
SELECT * FROM table_name
WHERE column_name BETWEEN start_value AND end_value;
例:
社員番号が100から200の範囲にあるすべての社員情報を抽出する。
SELECT * FROM employees
WHERE employee_id BETWEEN 100 AND 200;
BETWEEN 句は、数値、日付、文字列など、さまざまなデータ型に使用できます。
IN句を使う
SELECT * FROM table_name
WHERE column_name IN (value1, value2, ..., valueN);
部署IDが1、3、5のいずれかに属するすべての社員情報を抽出する。
SELECT * FROM employees
WHERE department_id IN (1, 3, 5);
IN 句は、リスト内の値の順序に関係なく、一致するレコードをすべて返します。
BETWEEN句とIN句のどちらを使用するかは、状況によって異なります。
- BETWEEN 句は、連続した範囲の値を検索する場合に適しています。
- IN 句は、個別の値のリストを検索する場合に適しています。
商品価格が1000円から2000円までの間、または3000円ちょうどの場合のすべての商品情報を抽出する。
この場合は、BETWEEN句とIN句を組み合わせる必要があります。
SELECT * FROM products
WHERE price BETWEEN 1000 AND 2000 OR price = 3000;
補足:
- BETWEEN句とIN句は、OR 句と組み合わせて、複数の条件を指定することができます。
SELECT *
FROM employees
WHERE salary BETWEEN 3000 AND 5000;
このコードは以下の結果を返します。
employee_id | name | department_id | salary
------------+------------+--------------+-------
1 | 田中一郎 | 1 | 3500
2 | 佐藤二郎 | 2 | 4200
3 | 高橋三郎 | 3 | 4800
説明:
SELECT *
は、すべての列を選択することを意味します。特定の列を選択する場合は、列名をカンマ区切りで指定します。FROM employees
は、employees
テーブルからレコードを取得することを意味します。WHERE salary BETWEEN 3000 AND 5000
は、salary
列の値が 3000 以上 5000 以下のレコードのみを選択することを意味します。
バリエーション:
- 部門ID 1 または 2 に属し、かつ給与が 3000 以上 5000 以下のすべての社員情報を抽出する:
SELECT *
FROM employees
WHERE department_id IN (1, 2) AND salary BETWEEN 3000 AND 5000;
SELECT *
FROM employees
WHERE department_id != 1 AND salary >= 4000;
ヒント:
- より複雑な条件を設定するには、
WHERE
句に複数の条件を組み合わせて使用することができます。 - 結果を特定の順序で表示するには、
ORDER BY
句を使用することができます。 - 抽出結果の数をカウントするには、
COUNT
関数を使用することができます。
これらのサンプルコードを参考に、状況に合わせて様々なクエリを作成してみてください。
MySQLにおける「IN」句と範囲検索の代替方法
サブクエリは、別のクエリの結果を条件として使用するクエリです。構文は以下の通りです。
SELECT * FROM table_name
WHERE column_name IN (SELECT column_name FROM subquery);
SELECT product_id
FROM products
WHERE price IN (
SELECT price
FROM products
WHERE price BETWEEN 1000 AND 2000
) OR price = 3000;
サブクエリ は、複雑な条件を設定する場合に役立ちます。
CASE式を使う
CASE 式は、条件に応じて異なる値を返す式です。構文は以下の通りです。
SELECT * FROM table_name
WHERE CASE WHEN column_name BETWEEN start_value AND end_value THEN 1 ELSE 0 END = 1;
SELECT * FROM employees
WHERE CASE WHEN employee_id BETWEEN 100 AND 200 THEN 1 ELSE 0 END = 1;
CASE 式は、シンプルな範囲検索の場合に役立ちます。
GROUP BY句とHAVING句を使う
GROUP BY 句は、グループごとに集計を行う際に使用します。HAVING 句は、グループ化された結果に対して条件を設定します。構文は以下の通りです。
SELECT * FROM table_name
GROUP BY column_name
HAVING column_name BETWEEN start_value AND end_value;
部署ごとの平均給与が3000円から5000円の範囲にあるすべての部署情報を抽出する。
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
HAVING avg_salary BETWEEN 3000 AND 5000;
MySQLで特定の範囲内の値を持つレコードを抽出するには、様々な方法があります。状況に合わせて最適な方法を選択することで、効率的にデータを取得することができます。
mysql