SQL BETWEENについて | SQL(Structured Query Language)
BETWEENの基礎編
BETWEEN演算子を使用すると、範囲を指定した条件を使用できます。
■BETWEEN演算子を使用した条件の指定方法 ①WHERE 列名 BETWEEN 下限値 AND 上限値 ②WHERE 列名 NOT BETWEEN 下限値 AND 上限値
BETWEENを指定した場合は列値が下限値以上かつ上限値以下の場合にTRUEになります。 それに対し、NOT BETWEENを指定した場合は、列値が下限値よりも小さい、または上限値よりも大きい場合にTRUEになります。
上記の文だけだと分かりづらいと思うので、不等号で分かりやすく説明します。 ■BETWEENの場合 WHERE 列名 >= 10000 AND 列名 <= 20000 ■NOT BETWEENの場合 BETWEENで指定した値以外を指します。
※注意点 指定範囲に使われてる文字に注意しましょう。 BETWEENの場合は、以上・以下が使用されています。 それに対し、NOT BETWEENは小さい・大きいが使用されています。 よって、以下のポイントは重要なので覚えておく必要があります。 ・BETWEEN演算子を指定した場合、境界値も取り出す範囲に含まれます。 ・NOT BETWEENを指定した場合、境界値は取り出す範囲に含まれません。
BETWEENの応用編
今まではBETWEENの使用方法について触れてきました。 今度は、下限値や上限値の範囲指定について触れていきます。
■日付を範囲指定する場合 以下は2020年1月1日から2021年1月1日までが指定範囲のSQL文です。 WHERE 列名 BETWEEN '2020-01-01' AND '2021-01-01'
※注目ポイント ・日付を指定する場合は一重引用符「’」を使用します。 ・日付書式は日本語環境のデフォルトである「年ー月ー日」になりますが、英語環境ではデフォルトの日付書式は「日ー月ー年」になります。
■文字列を指定する場合 以下は頭文字がCからHで終わる文字列を参照するためのSQL文です。 WHERE 列名 BETWEEN 'C’ AND 'H’
データの中に、頭文字がHから始まる文字列が複数あり、それらを参照したい場合は上記のSQL文だと参照することが出来ません。何故なら、’C' < ’Hair' < ’H’が偽となるため、実行結果にHairが含まれません。さらに深堀すると’H' < ’Hair'となるからです。
※注目ポイント ・文字を指定する場合は一重引用符「’」を使用します。 ・文字列の場合、指定範囲に気を付けましょう。
■境界値を含まず範囲指定する場合 BETWEENを使用して範囲指定する場合は、以上・以下でした。 ですが、NOT INを使用することで境界値を含まず範囲指定することが可能です。 例えば、2020年1月1日から2020年12月31日を指定範囲にし、境界値である2020年12月31日を除外したい場合のSQL文が以下になります。
WHERE (列名 BETWEEN ’2020-01-01' AND '2020-12-31') AND 列名 NOT IN (’2020-12-31’)
※注目ポイント ・NOT INを不等号で表すことも出来ます。その場合は、NOT INではなく!=と書きましょう。
まとめ
・範囲条件指定にBETWEENを使用すると、可読性がよくなる。 ・NOT INなどを組み合わせて、以上・小さいの指定が可能になる。