Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのbetweenについてまとめています。

SQL betweenの構文

SQLのbetweenは、wherej句にカラム名 between <下限値> and <上限値>と指定します。下記は、emp_no(社員番号)に数値で範囲指定する場合の記述方法です。

select * from employees where emp_no between 10010 and 10020;
+--------+------------+------------+-------------+--------+------------+
| emp_no | birth_date | first_name | last_name   | gender | hire_date  |
+--------+------------+------------+-------------+--------+------------+
|  10010 | 1963-06-01 | Duangkaew  | Piveteau    | F      | 1989-08-24 |
|  10011 | 1953-11-07 | Mary       | Sluis       | F      | 1990-01-22 |
|  10012 | 1960-10-04 | Patricio   | Bridgland   | M      | 1992-12-18 |
|  10013 | 1963-06-07 | Eberhardt  | Terkki      | M      | 1985-10-20 |
|  10014 | 1956-02-12 | Berni      | Genin       | M      | 1987-03-11 |
|  10015 | 1959-08-19 | Guoxiang   | Nooteboom   | M      | 1987-07-02 |
|  10016 | 1961-05-02 | Kazuhito   | Cappelletti | M      | 1995-01-27 |
|  10017 | 1958-07-06 | Cristinel  | Bouloucos   | F      | 1993-08-03 |
|  10018 | 1954-06-19 | Kazuhide   | Peha        | F      | 1987-04-03 |
|  10019 | 1953-01-23 | Lillian    | Haddadi     | M      | 1999-04-30 |
|  10020 | 1952-12-24 | Mayuko     | Warwick     | M      | 1991-01-26 |
+--------+------------+------------+-------------+--------+------------+
11 rows in set (0.00 sec)

数値、文字列、日付、時刻等に対して使用可能です。

なお、不等号で書き直すと、上記のSQLは以下のようになります。

select * from employees where emp_no >= 10010 and emp_no <= 10020;

betweenを使うと上限値、下限値を含む条件指定になります。下限値未満、上限値より大きいという条件指定はbetweenでは表現できません。不等号を使った条件式を記述する必要があります。

SQL betweenの使い方

SQL betweenで文字列範囲指定

betweenで扱えるのは数値だけではありません。文字列の範囲指定も可能です。文字列の場合、デフォルトでは範囲判定はアルファベット順にソートした順番にそって判定されます。

mysql> SELECT * 
FROM   employees 
WHERE  first_name BETWEEN 'A' AND 'D' 
LIMIT  10; 

+--------+------------+------------+------------+--------+------------+
| emp_no | birth_date | first_name | last_name  | gender | hire_date  |
+--------+------------+------------+------------+--------+------------+
|  10002 | 1964-06-02 | Bezalel    | Simmel     | F      | 1985-11-21 |
|  10004 | 1954-05-01 | Chirstian  | Koblick    | M      | 1986-12-01 |
|  10006 | 1953-04-20 | Anneke     | Preusig    | F      | 1989-06-02 |
|  10014 | 1956-02-12 | Berni      | Genin      | M      | 1987-03-11 |
|  10017 | 1958-07-06 | Cristinel  | Bouloucos  | F      | 1993-08-03 |
|  10023 | 1953-09-29 | Bojan      | Montemayor | F      | 1989-12-17 |
|  10033 | 1956-11-14 | Arif       | Merlo      | M      | 1987-03-18 |
|  10034 | 1962-12-29 | Bader      | Swan       | M      | 1988-09-21 |
|  10035 | 1953-02-08 | Alain      | Chappelet  | M      | 1988-09-05 |
|  10036 | 1959-08-10 | Adamantios | Portugali  | M      | 1992-01-03 |
+--------+------------+------------+------------+--------+------------+
10 rows in set (0.00 sec)

なお、日本語などのマルチバイト文字の場合、範囲指定が想定通りに動作しないケースがあります。この場合は、照合順序設定を確認して、想定通りにソートが可能かどうか確認してみてください。

【関連記事】
SQLの昇順ソート指定はasc マルチバイト文字列のソートは照合順序に従う 

SQL betweenで日付の範囲指定

日付型や時刻型のカラムに対しても範囲指定が可能です。以下の例は、employeesテーブルから、誕生日(birth_date)が1960年1月1日~1962年12月31日のデータを抽出する例です。

mysql> SELECT * 
FROM   employees 
WHERE  birth_date BETWEEN '1960-01-01' AND '1962-12-31' 
LIMIT  10; 

+--------+------------+------------+-------------+--------+------------+
| emp_no | birth_date | first_name | last_name   | gender | hire_date  |
+--------+------------+------------+-------------+--------+------------+
|  10012 | 1960-10-04 | Patricio   | Bridgland   | M      | 1992-12-18 |
|  10016 | 1961-05-02 | Kazuhito   | Cappelletti | M      | 1995-01-27 |
|  10021 | 1960-02-20 | Ramzi      | Erde        | M      | 1988-02-10 |
|  10027 | 1962-07-10 | Divier     | Reistad     | F      | 1989-07-07 |
|  10032 | 1960-08-09 | Jeong      | Reistad     | F      | 1990-06-20 |
|  10034 | 1962-12-29 | Bader      | Swan        | M      | 1988-09-21 |
|  10038 | 1960-07-20 | Huan       | Lortz       | M      | 1989-09-20 |
|  10043 | 1960-09-19 | Yishay     | Tzvieli     | M      | 1990-10-20 |
|  10044 | 1961-09-21 | Mingsen    | Casley      | F      | 1994-05-21 |
|  10046 | 1960-07-23 | Lucien     | Rosenbaum   | M      | 1992-06-20 |
+--------+------------+------------+-------------+--------+------------+
10 rows in set (0.00 sec)

【関連記事】
SQL betweenで範囲指定するサンプルコード 速度アップにもつながる?

まとめ

ポテパンダの一言メモ
  • SQLのbetweenは範囲指定条件が可能
  • betweenは<上限値>以上、<下限値>以下の指定。不等号で書き換えが可能。
  • betweenは数値のほか、文字列や日付、時刻に対して指定が可能

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。