概要: このチュートリアルでは、SQLのBETWEEN
演算子を使用して、値が特定の範囲内にあるかどうかを確認する方法を学習します。
SQL BETWEEN演算子の紹介
BETWEEN
演算子は、SQLの論理演算子の1つです。BETWEEN
演算子は、値が値の範囲内にあるかどうかをチェックします。
BETWEEN
演算子の構文は以下のとおりです。
expression BETWEEN low AND high;
Code language: SQL (Structured Query Language) (sql)
BETWEEN
演算子は、expression
が下限値以上(>=
)であり、上限値以下(<=
)である場合にtrueを返します。
技術的には、BETWEEN
は、以上(>=
)および以下(<=
)の演算子を使用する以下の式と同等です。
expression >= low AND expression <= high
Code language: SQL (Structured Query Language) (sql)
排他的な範囲で値を比較するには、未満(<
)およびより大きい(>
)の比較演算子を使用する必要があります。
NOT BETWEEN
BETWEEN
演算子の結果を否定するには、NOT
演算子を使用します。
expression NOT BETWEEN low AND high
Code language: SQL (Structured Query Language) (sql)
NOT BETWEEN
は、式がlow
未満またはhigh
より大きい(>)場合にtrueを返し、それ以外の場合はfalseを返します。
BETWEEN
演算子と同様に、NOT BETWEEN
演算子を、未満(<)およびより大きい(>)の演算子とOR
演算子を使用して次のように書き直すことができます。
expression < low OR expression > high
Code language: SQL (Structured Query Language) (sql)
実際には、BETWEEN
およびNOT BETWEEN
演算子は、列の値が特定の範囲内にある行を選択するために、WHERE
句のSELECT
でよく使用されます。
SQL BETWEEN演算子の例
サンプルデータベースのemployees
テーブルを使用して、BETWEEN
演算子の動作方法を説明します。

1) 数値を使用したSQL BETWEEN演算子の例
次のステートメントは、給与が2,500~2,900の間であるすべての従業員を見つけるためにBETWEEN
演算子を使用しています。
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
WHERE
salary BETWEEN 2500 AND 2900
ORDER BY
salary DESC;
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+-------------+---------+
| employee_id | first_name | last_name | salary |
+-------------+------------+-------------+---------+
| 116 | Shelli | Baida | 2900.00 |
| 117 | Sigal | Tobias | 2800.00 |
| 126 | Irene | Mikkilineni | 2700.00 |
| 118 | Guy | Himuro | 2600.00 |
| 119 | Karen | Colmenares | 2500.00 |
+-------------+------------+-------------+---------+
結果セットには、給与が2,500および2,900である従業員が含まれていることに注意してください。
次のクエリは、上記のクエリと同じ結果セットを返します。ただし、代わりに以上(>=)および以下(<=)の比較演算子を使用しています。
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
WHERE
salary >= 2500 AND salary <= 2900
ORDER BY
salary;
Code language: SQL (Structured Query Language) (sql)
2) SQL NOT BETWEENの例
次の例では、NOT BETWEEN
演算子を使用して、給与が2,500~2,900の範囲にないすべての従業員を見つけます。
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
WHERE
salary NOT BETWEEN 2500 AND 2900
ORDER BY salary DESC;
Code language: SQL (Structured Query Language) (sql)
+-------------+-------------+------------+----------+
| employee_id | first_name | last_name | salary |
+-------------+-------------+------------+----------+
| 100 | Steven | King | 24000.00 |
| 101 | Neena | Kochhar | 17000.00 |
| 102 | Lex | De Haan | 17000.00 |
| 145 | John | Russell | 14000.00 |
| 146 | Karen | Partners | 13500.00 |
| 201 | Michael | Hartstein | 13000.00 |
| 205 | Shelley | Higgins | 12000.00 |
| 108 | Nancy | Greenberg | 12000.00 |
| 114 | Den | Raphaely | 11000.00 |
| 204 | Hermann | Baer | 10000.00 |
| 109 | Daniel | Faviet | 9000.00 |
| 103 | Alexander | Hunold | 9000.00 |
| 176 | Jonathon | Taylor | 8600.00 |
| 177 | Jack | Livingston | 8400.00 |
| 206 | William | Gietz | 8300.00 |
| 121 | Adam | Fripp | 8200.00 |
| 110 | John | Chen | 8200.00 |
| 120 | Matthew | Weiss | 8000.00 |
| 122 | Payam | Kaufling | 7900.00 |
| 112 | Jose Manuel | Urman | 7800.00 |
| 111 | Ismael | Sciarra | 7700.00 |
| 178 | Kimberely | Grant | 7000.00 |
| 113 | Luis | Popp | 6900.00 |
| 123 | Shanta | Vollman | 6500.00 |
| 203 | Susan | Mavris | 6500.00 |
| 179 | Charles | Johnson | 6200.00 |
| 202 | Pat | Fay | 6000.00 |
| 104 | Bruce | Ernst | 6000.00 |
| 106 | Valli | Pataballa | 4800.00 |
| 105 | David | Austin | 4800.00 |
| 200 | Jennifer | Whalen | 4400.00 |
| 107 | Diana | Lorentz | 4200.00 |
| 192 | Sarah | Bell | 4000.00 |
| 193 | Britney | Everett | 3900.00 |
| 115 | Alexander | Khoo | 3100.00 |
+-------------+-------------+------------+----------+
3) 日付範囲を使用したSQL BETWEEN演算子
次の例では、BETWEEN
演算子を使用して、1999年1月1日から2000年12月31日の間に会社に入社したすべての従業員を見つけます。
SELECT
employee_id,
first_name,
last_name,
hire_date
FROM
employees
WHERE
hire_date BETWEEN '1999-01-01' AND '2000-12-31'
ORDER BY
hire_date;
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+------------+------------+
| employee_id | first_name | last_name | hire_date |
+-------------+------------+------------+------------+
| 107 | Diana | Lorentz | 1999-02-07 |
| 178 | Kimberely | Grant | 1999-05-24 |
| 119 | Karen | Colmenares | 1999-08-10 |
| 113 | Luis | Popp | 1999-12-07 |
| 179 | Charles | Johnson | 2000-01-04 |
+-------------+------------+------------+------------+
次の例では、NOT BETWEEN
演算子を使用して、1989年1月1日から1999年12月31日の間に会社に入社していない従業員を見つけます。
SELECT
employee_id,
first_name,
last_name,
hire_date
FROM
employees
WHERE
hire_date NOT BETWEEN '1989-01-01' AND '1992-12-31'
ORDER BY
hire_date;
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+-----------+------------+
| employee_id | first_name | last_name | hire_date |
+-------------+------------+-----------+------------+
| 100 | Steven | King | 1987-06-17 |
| 200 | Jennifer | Whalen | 1987-09-17 |
| 179 | Charles | Johnson | 2000-01-04 |
+-------------+------------+-----------+------------+
3 rows in set (0.00 sec)
Code language: JavaScript (javascript)
4) 関数を使用したSQL BETWEEN演算子の例
次の例では、BETWEEN
演算子をYEAR
関数と共に使用して、1990年から1993年の間に会社に入社した従業員を見つけます。
SELECT
employee_id,
first_name,
last_name,
year(hire_date) joined_year
FROM
employees
WHERE
year(hire_date) BETWEEN 1990 and 1993
ORDER BY
hire_date;
出力
+-------------+------------+-----------+-------------+
| employee_id | first_name | last_name | joined_year |
+-------------+------------+-----------+-------------+
| 103 | Alexander | Hunold | 1990 |
| 104 | Bruce | Ernst | 1991 |
| 102 | Lex | De Haan | 1993 |
+-------------+------------+-----------+-------------+
この例では
- まず、
YEAR()
関数は、採用日から年を返します。 - 次に、
BETWEEN
演算子はYEAR()
関数の結果を使用して、それが1990~1993の範囲内にあるかどうかをチェックします。
データベースがYEAR()
関数をサポートしていない場合は、同様の関数を使用する必要があります。
データベース | 日付から年を抽出する関数 |
---|---|
PostgreSQL | DATE_PART('year', hire_date) |
Oracle | EXTRACT(year from hire_date) |
SQL Server | YEAR(hire_date) |
まとめ
- BETWEEN演算子は、値が特定の範囲内にある場合にtrueを返します。
- NOT演算子を使用して、BETWEEN演算子を否定します。