MySQL 入門

MySQL IN と BETWEEN 演算子

IN および BETWEEN 演算子は、簡潔で読みやすい構文を提供することで、複雑な WHERE 句を劇的にシンプルにします。技術的には OR>=<= といった比較演算子を組み合わせることで同じ結果を得ることは可能ですが、INBETWEEN を使用することで、クエリの記述量を減らし、ロジックエラーのリスクを最小限に抑えることができます。

1. IN 演算子を使用したフィルタリング

IN 演算子は、WHERE 句の中で複数の値を指定することを可能にします。これは本質的に、複数の OR 条件を短縮した形式です。あるカラムの値が、提供したリスト内のいずれかの項目と一致するかどうかを確認する場合、IN を使用するのが最もクリアな選択肢です。

customers(顧客)テーブルを含むデータベースを例に考えてみましょう。ドイツ (Germany)、フランス (France)、またはスペイン (Spain) に居住するすべての顧客を抽出したい場合、OR を使用した書き方は以下のようになります。

SELECT customer_name, country 
FROM customers 
WHERE country = 'Germany' OR country = 'France' OR country = 'Spain';

IN 演算子を使用すると、クエリの可読性が大幅に向上します。

SELECT customer_name, country 
FROM customers 
WHERE country IN ('Germany', 'France', 'Spain');

IN 演算子は数値の処理も同様に簡単です。特定の ID を持つ注文を検索するには、次のように記述します。

SELECT order_id, total_amount 
FROM orders 
WHERE order_id IN (10248, 10250, 10255);

パフォーマンスのヒント:

IN に提供するリストが静的(固定)で比較的小さい場合、MySQL は非常に効率的に実行します。もし数千個もの値と照合する必要がある場合は、コード内に長いリストをハードコーディングするのではなく、サブクエリ(後のモジュールで詳説)の使用を検討してください。

2. BETWEEN 演算子による範囲指定フィルタリング

BETWEEN 演算子は、指定された範囲内の値を選択するために使用されます。この範囲は 境界値を含む (inclusive) ため、指定した開始値と終了値の両方がクエリ結果に含まれます。

products(製品)テーブルを照会しており、価格が 10 から 20 の間の商品を検索したい場合、標準的な比較演算子では次のようになります。

SELECT product_name, price 
FROM products 
WHERE price >= 10 AND price <= 20;

BETWEEN を使用すれば、これを単一の範囲ベースの式に簡略化できます。

SELECT product_name, price 
FROM products 
WHERE price BETWEEN 10 AND 20;

2.1 日付の処理

日付によるフィルタリングを行う際、BETWEEN は時系列を自然に扱えるため特に強力です。2023年第1四半期のすべての注文を検索するには、以下のように記述します。

SELECT order_id, order_date 
FROM orders 
WHERE order_date BETWEEN '2023-01-01' AND '2023-03-31';

3. 重要な細部と注意点

これら2つの演算子を使用する際は、以下の核心的な原則に注意してください。

  • 境界値の包含 (Inclusivity): BETWEEN は常に境界値を含みます。範囲を BETWEEN 10 AND 20 と設定した場合、10 と 20 という数値自体も出力結果に含まれます。
  • 順序の重要性 (Order Matters): BETWEEN 文における最初の値は、必ず2番目の値よりも小さくなければなりません。BETWEEN 20 AND 10 は空集合を返します。なぜなら、20より大きく、かつ10より小さいという値は存在し得ないからです。
  • 否定の使用 (Negation): これら2つの演算子は論理的に反転させることができます。特定のリスト外の値を除外するには NOT IN を、特定の範囲外を除外するには NOT BETWEEN を使用します。

3.1 クエリエンジンの実行ロジックフロー

  1. WHERE 句の評価
  2. 使用される演算子の特定
  3. 条件チェック:
    • IN の場合:値のリストと照合。
    • BETWEEN の場合:値が境界値を含む範囲内にあるかチェック。
  4. 条件を満たす行を返却