SQL 速習チュートリアル

SQL BETWEEN 演算子

1. SQL BETWEEN 演算子

BETWEEN 演算子は、WHERE 句内で使用され、指定された範囲内の値を選択するために使用されます。

この範囲はインクルーシブ(inclusive)です。つまり、範囲の開始値と終了値の両方が結果に含まれます。

値には数値、テキスト、または日付を指定できます。

1.1 例(自分専用の SQL Server を取得)

価格が 10 から 20 の間にあるすべての製品を選択します:

-- 価格が10から20の間の製品をすべて選択 --
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;

2. シンタックス

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

3. デモ用データベース

以下は、例題で使用する Products テーブルの抜粋です。

ProductIDProductNameSupplierIDCategoryIDUnitPrice
1Chais1110 boxes x 20 bags18.00
2Chang1124 - 12 oz bottles19.00
3Aniseed Syrup1212 - 550 ml bottles10.00
4Chef Anton's Cajun Seasoning2248 - 6 oz jars22.00
5Chef Anton's Gumbo Mix2236 boxes21.35

4. NOT BETWEEN

NOT BETWEEN 演算子は、指定された範囲外の値を選択するために WHERE 句で使用されます。

次の SQL は、価格が 10 から 20 の間ではないすべての製品をリターンします。

4.1 例

-- 価格が10から20の間ではない製品を選択 --
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;

5. BETWEEN と IN の併用

次の SQL は、価格が 10 から 20 の間であり、かつ CategoryID が 1、2、または 3 であるすべての製品をリターンします。

5.1 例

SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20
AND CategoryID IN (1,2,3);

6. テキスト値での BETWEEN

次の SQL は、ProductName がアルファベット順で 'Geitost' と 'Louisiana Hot Spiced Okra' の間にあるすべての製品を選択します。

6.1 例

-- アルファベット順で指定した範囲内の製品名を選択 --
SELECT * FROM Products
WHERE ProductName BETWEEN 'Geitost' AND 'Louisiana Hot Spiced Okra'
ORDER BY ProductName;

7. テキスト値での NOT BETWEEN

次の SQL は、ProductName がアルファベット順で 'Geitost' と 'Louisiana Hot Spiced Okra' の間ではないすべての製品を選択します。

7.1 例

-- アルファベット順で指定した範囲外の製品名を選択 --
SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Geitost' AND 'Louisiana Hot Spiced Okra'
ORDER BY ProductName;

8. 日付での BETWEEN

BETWEEN 演算子は、特定の期間内のレコードフィルタリングする際にも非常に便利です。日付の形式がデータベースの設定(例:'YYYY-MM-DD')と一致していることを確認してください。

次の SQL は、1996年7月に発注されたすべての注文(Orders)を選択します。

8.1 例

-- 1996年7月1日から31日までの注文を選択 --
SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';

9. サンプルテーブル

以下は、上記の例で使用した Orders テーブルの抜粋です。

OrderIDCustomerIDEmployeeIDOrderDateShipperID
102489051996-07-043
102498161996-07-051
102503441996-07-082
102518431996-07-081
102527641996-07-092