SQLで条件を絞る際に、特定の範囲を指定して検索をしたい時があると思います。
このような場合は、SQLのBETWEEN演算子を使いましょう!
本記事では、BETWEEN演算子の使い方から具体的な使用ケースまでを詳しく解説しています。
目次
BETWEEN演算子とは
BETWEEN演算子は「~の間に」という単語の意味を持つように、指定した範囲のレコードを取得することができます。WHERE句と一緒に使われることが多いです。
BETWEEN演算子の使い方
BETWEEN演算子の基本構文は下記のようになります。
SELECT カラム名
FROM テーブル名
WHERE カラム名 BETWEEN 下限値 AND 上限値;
BETWEEN 下限値 AND 上限値
と記載の部分によって、下限値以上かつ上限値以下である値を検索します。下限値や上限値と指定している値(つまり、境界となる値)も含まれることがポイントです。
BETWEEN演算子を使わない書き方
BETWEEN演算子を使わずに、全く同じことを実現するクエリを書くことができます。
それが下記のように不等号を使って書く方法です。
SELECT カラム名
FROM テーブル名
WHERE カラム名 >= 下限値 AND カラム名 <= 上限値;
BETWEENを使った方が簡潔に書けるため、できるだけBETWEENを使うことをおすすめします。
境界値を含まない書き方
BETWEEN演算子を使うと境界値を含んでしまいます。よって、境界値を含みたくないのであれば、BETWEENを使わない書き方にする必要があります。
SELECT カラム名
FROM テーブル名
WHERE カラム名 > 下限値 AND カラム名 < 上限値;
これで実現できます。
カラム名 > 下限値
によって、下限値よりも大きいという条件を指定し、カラム名 < 上限値
によって上限値よりも小さいという条件を指定しています。
サンプルデータ
具体例を見ていく上で、今回も下記のusersテーブルをサンプルデータとして使用していきます。
id | name | age | address | created_at |
---|---|---|---|---|
1 | 山田 | 25 | 東京都 | 2021-06-10 |
2 | 鈴木 | 34 | 神奈川県 | 2021-12-18 |
3 | 佐藤 | 28 | 北海道 | 2021-06-16 |
4 | 大野 | 45 | 大阪府 | 2020-05-20 |
5 | 小池 | 56 | 京都府 | 2021-04-02 |
6 | 近藤 | 23 | 東京都 | 2021-03-23 |
7 | 佐々木 | 37 | 千葉県 | 2021-01-06 |
8 | 宮田 | 31 | 福岡県 | 2020-08-12 |
数値の範囲指定をしてみよう
では、具体例を見ていきましょう。まずはBETWEENを使って数値の範囲指定を行います。
検索クエリ
usersテーブルから年齢が25歳以上、34歳以下の人を取得する
SELECT *
FROM users
WHERE age BETWEEN 25 AND 34;
実行結果
id | name | age | address | created_at |
---|---|---|---|---|
1 | 山田 | 25 | 東京都 | 2021-06-10 |
2 | 鈴木 | 34 | 神奈川県 | 2021-12-18 |
3 | 佐藤 | 28 | 北海道 | 2021-06-16 |
6 | 近藤 | 23 | 東京都 | 2021-03-23 |
8 | 宮田 | 31 | 福岡県 | 2020-08-12 |
ageカラムの値が25以上かつ34以下のレコードを取得することができました。
日付の範囲指定をしてみよう
次に、BETWEENを使った日付の範囲指定を行います。
検索クエリ
usersテーブルから2021年の1月1日から2021年6月30日までの間に作成されたレコードを取得する
SELECT *
FROM users
WHERE created_at BETWEEN '2021-01-01' AND '2021-06-30';
実行結果
id | name | age | address | created_at |
---|---|---|---|---|
1 | 山田 | 25 | 東京都 | 2021-06-10 |
3 | 佐藤 | 28 | 北海道 | 2021-06-16 |
5 | 小池 | 56 | 京都府 | 2021-04-02 |
6 | 近藤 | 23 | 東京都 | 2021-03-23 |
7 | 佐々木 | 37 | 千葉県 | 2021-01-06 |
BETWEENの否定形
BETWEEN演算子はNOT演算子と組み合わせることで否定形にできます。
基本構文
SELECT カラム名
FROM テーブル名
WHERE カラム名 NOT BETWEEN 下限値 AND 上限値;
検索クエリ
usersテーブルから20代だけを除外したレコードを取得する
SELECT *
FROM users
WHERE age NOT BETWEEN 20 AND 29;
実行結果
id | name | age | address | created_at |
---|---|---|---|---|
2 | 鈴木 | 34 | 神奈川県 | 2021-12-18 |
4 | 大野 | 45 | 大阪府 | 2020-05-20 |
5 | 小池 | 56 | 京都府 | 2021-04-02 |
7 | 佐々木 | 37 | 千葉県 | 2021-01-06 |
8 | 宮田 | 31 | 福岡県 | 2020-08-12 |
20~29の範囲をNOTを使って否定すれば、20代以外を取得することができます。
内容のまとめ
- BETWEENは指定した範囲のレコードを取得することができる
- BETWEENは基本的にはWHERE句と併用する
WHERE カラム名 BETWEEN 下限値 AND 上限値
と書くことで、下限値以上かつ上限値以下である値を検索できる- BETWEENを使わなくても、不等号を使って
カラム名 >= 下限値 AND カラム名 <= 上限値
と書けば同じ結果を得られる - BETWEENは数値や日付データを扱う際に使うことが多い
- NOTを組み合わせることでBETWEENの否定形を作ることができる