SQL BETWEEN

概要: このチュートリアルでは、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 <= highCode language: SQL (Structured Query Language) (sql)

排他的な範囲で値を比較するには、未満(<)およびより大きい(>)の比較演算子を使用する必要があります。

NOT BETWEEN

BETWEEN演算子の結果を否定するには、NOT演算子を使用します。

expression NOT BETWEEN low AND highCode language: SQL (Structured Query Language) (sql)

NOT BETWEENは、式がlow未満またはhighより大きい(>)場合にtrueを返し、それ以外の場合はfalseを返します。

BETWEEN演算子と同様に、NOT BETWEEN演算子を、未満(<)およびより大きい(>)の演算子とOR演算子を使用して次のように書き直すことができます。

expression < low OR expression > highCode language: SQL (Structured Query Language) (sql)

実際には、BETWEENおよびNOT BETWEEN演算子は、列の値が特定の範囲内にある行を選択するために、WHERE句のSELECTでよく使用されます。

SQL BETWEEN演算子の例

サンプルデータベースemployeesテーブルを使用して、BETWEEN演算子の動作方法を説明します。

employees_table

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()関数をサポートしていない場合は、同様の関数を使用する必要があります。

データベース日付から年を抽出する関数
PostgreSQLDATE_PART('year', hire_date)
OracleEXTRACT(year from hire_date)
SQL ServerYEAR(hire_date)

まとめ

  • BETWEEN演算子は、値が特定の範囲内にある場合にtrueを返します。
  • NOT演算子を使用して、BETWEEN演算子を否定します。
このチュートリアルは役に立ちましたか?