MySQL BETWEEN 演算子
1. MySQL BETWEEN 演算子の概要
BETWEEN 演算子は、WHERE 句内で指定した範囲内の値を選択するために使用されます。
この演算子が指定する範囲はインクルーシブ(inclusive)です。つまり、開始値と終了値そのものも検索結果に含まれます。
対象となる値の種類には、数値、テキスト(文字列)、日付が含まれます。
2. BETWEEN の基本構文
SELECT カラム名(s)
FROM テーブル名
WHERE カラム名 BETWEEN 値1 AND 値2;3. デモ用データベース
以下は、Northwind サンプルデータベースの「Products」テーブルから抜粋したデータです。
| ProductID | ProductName | SupplierID | CategoryID | UnitPrice |
|---|---|---|---|---|
| 1 | Chais | 1 | 1 | 18.00 |
| 2 | Chang | 1 | 1 | 19.00 |
| 3 | Aniseed Syrup | 1 | 2 | 10.00 |
| 4 | Chef Anton's Cajun Seasoning | 1 | 2 | 22.00 |
| 5 | Chef Anton's Gumbo Mix | 1 | 2 | 21.35 |
4. BETWEEN の使用例
次の SQL は、価格(Price)が 10 から 20 の間にあるすべての製品を選択します。
-- 価格が 10 以上 20 以下の製品をすべて抽出します
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;5. NOT BETWEEN の使用例
NOT BETWEEN 演算子を使用すると、指定した範囲外の値を WHERE 句で選択できます。
次の SQL は、価格が 10 から 20 の間ではないすべての製品を返します。
-- 価格が 10 から 20 の範囲に含まれない製品をすべて抽出します
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;6. BETWEEN と IN を組み合わせる例
次の SQL は、価格が 10 から 20 の間であり、かつ CategoryID が 1、2、または 3 であるすべての製品を返します。
-- 価格の範囲指定に加え、IN 句でカテゴリを指定します
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20
AND CategoryID IN (1, 2, 3);7. 文字列(テキスト値)における BETWEEN の例
次の SQL は、ProductName がアルファベット順で "Carnarvon Tigers" と "Mozzarella di Giovanni" の間にあるすべての製品を選択します。
-- 商品名をアルファベット順の範囲でフィルタリングします
SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;また、次の SQL は ProductName が "Carnarvon Tigers" と "Chef Anton's Cajun Seasoning" の間にあるすべての製品を選択します。
SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND "Chef Anton's Cajun Seasoning"
ORDER BY ProductName;8. 文字列における NOT BETWEEN の例
次の SQL は、ProductName がアルファベット順で "Carnarvon Tigers" と "Mozzarella di Giovanni" の間ではないすべての製品を選択します。
-- 指定したアルファベットの範囲外にある製品を抽出します
SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;9. サンプルテーブル(Orders)
以下は、Northwind サンプルデータベースの「Orders」テーブルから抜粋したデータです。
| OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
|---|---|---|---|---|
| 10248 | 90 | 5 | 1996-07-04 | 3 |
| 10249 | 81 | 6 | 1996-07-05 | 1 |
| 10250 | 34 | 4 | 1996-07-08 | 2 |
| 10251 | 84 | 3 | 1996-07-08 | 1 |
| 10252 | 76 | 4 | 1996-07-09 | 2 |
10. 日付における BETWEEN の例
BETWEEN 演算子は、特定の期間内のレコードをフィルタリングする際にも非常に便利です。日付のフォーマットがデータベースの設定(例: 'YYYY-MM-DD')と一致していることを確認してください。
次の SQL は、1996年7月中に注文されたすべてのレコードを選択します。
-- 1996年7月1日から1996年7月31日までの注文を抽出します
SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';