SQLのBETWEENは、数値や日付などの範囲を指定してデータを検索する機能です。特定のテーブルから範囲を指定してデータを抽出したい場合に使用されます。
このBETWEENを活用することで、可読性の高いコードとなり開発が抜群に捗るでしょう。
本記事では、以下のテーブルを用いながら、BETWEENの使い方や似た機能の使い方を解説します。
id | name | date |
---|---|---|
1 | one | 2023-01-01 00:00:00 |
2 | two | 2023-01-01 00:20:00 |
3 | three | 2023-01-02 00:00:00 |
4 | four | 2023-01-02 10:00:00 |
5 | five | 2023-01-03 00:00:00 |
目次
SQLのBETWEENは、数値や日付などの範囲を指定して検索する機能です。主に、WHERE句で条件指定する際に使われます。
使用する際は、「WHERE カラム名 BETWEEN 開始値 AND 終了値」のように記述します。
BETWEENを使わずに「<」や「=」などの記号を組み合わせても処理はできますが、BETWEENを使うことで可読性の向上が期待できるのです。可読性の高さは記述ミスやバグの防止に直結するため、プログラミングにおいて特に重視したいポイントといえます。
SQLのBETWEENの主な使い方は以下の5つです。
それぞれ詳しく解説します。
BETWEEN演算子を使用すると、指定された値が含まれたデータを検索できます。「以上や以下」と同じ役割を持っているということになるため、「<=」「>=」といった演算子でも表すことができるのです。
BETWEENを使用する主な利点は、範囲指定が簡潔になることです。BETWEENを用いたコードの例は以下の通りです。
SELECT * FROM sample WHERE id BETWEEN 2 AND 4;
このコードでは、「id」を対象に開始値を2、終了値を4としているため、実行結果は以下のようになります。
id | name | date |
---|---|---|
2 | two | 2023-01-01 00:20:00 |
3 | three | 2023-01-02 00:00:00 |
4 | four | 2023-01-02 10:00:00 |
日付の範囲を指定して検索する方法について解説します。実際のコード例は以下の通りです。
SELECT * FROM sample WHERE date BETWEEN ‘2023-01-01‘ AND ‘2023-01-02‘;
このコードを実行すると、以下のような結果になります。
id | name | date |
---|---|---|
1 | one | 2023-01-01 00:00:00 |
2 | two | 2023-01-01 00:20:00 |
3 | three | 2023-01-02 00:00:00 |
範囲を「2023-01-01」から「2023-01-02」に指定したにもかかわらず「2023-01-02 10:00:00」が表示されていません。
日付だけで時間を指定しないと、「その日付の00:00:00」とみなされてしまうためです。
そのため、「2023-01-01」から「2023-01-02」までの範囲をすべて表示したい場合は以下のように記述するとよいでしょう。
SELECT * FROM sample WHERE date BETWEEN ‘2023-01-01 00:00:00‘ AND ‘2023-01-02 23:59:59‘;
実行結果は以下の通りです。
id | name | date |
---|---|---|
1 | one | 2023-01-01 00:00:00 |
2 | two | 2023-01-01 00:20:00 |
3 | three | 2023-01-02 00:00:00 |
4 | four | 2023-01-02 10:00:00 |
SQLのBETWEENは、指定した範囲内のデータを検索するためのものです。さらに、「AND」や「OR」を用いることで、複数条件を組み合わせることができます。ANDなら「条件1かつ条件2」、ORなら「条件1または条件2」を満たすデータが表示されます。
実際のコードの例は以下の通りです。
SELECT * FROM sample WHERE id BETWEEN 1 AND 3 OR date ‘2023-01-02 00:00:00‘ AND ‘2023-01-03 23:59:59‘;
このコードの場合、idが1から3または日付が2023-01-02 00:00:00から2023-01-03 23:59:59のデータが表示されるため、以下のような実行結果になります。
id | name | date |
---|---|---|
1 | one | 2023-01-01 00:00:00 |
2 | two | 2023-01-01 00:20:00 |
3 | three | 2023-01-02 00:00:00 |
4 | four | 2023-01-02 10:00:00 |
5 | five | 2023-01-03 00:00:00 |
上記サンプルコードのORをANDにした場合は、idが1から3かつ日付が2023-01-02 00:00:00から2023-01-03 23:59:59のデータが表示されるため、以下のような実行結果になります。
id | name | date |
---|---|---|
3 | three | 2023-01-02 00:00:00 |
SQLのBETWEENは、文字列の検索も可能です。ただし、BETWEEN演算子を使用して文字列の範囲検索をおこなう場合、アルファベット順や文字コード順に基づいて範囲が決定されることを理解しておきましょう。実際のコード例は、以下の通りです。
SELECT * FROM sample WHERE name BETWEEN ‘a’ AND ‘j’;
文字列を範囲指定した場合、アルファベット順に並んだ状態から検索されます。
上記コードの場合は、「a」から「j」までのデータが表示されるため、実行結果は以下のようになります。
id | name | date |
---|---|---|
4 | four | 2023-01-02 10:00:00 |
5 | five | 2023-01-03 00:00:00 |
SQLのBETWEENを否定する方法もあります。検索範囲外のデータを表示したい場合に、BETWEENの否定が有効です。
BETWEENの前に「NOT」をつけることで、条件に指定した範囲外のデータを取得し表示できます。実際のコードの例は以下の通りです。
SELECT * FROM sample WHERE id NOT BETWEEN 2 AND 4;
id | name | date |
---|---|---|
1 | one | 2023-01-01 00:00:00 |
5 | five | 2023-01-03 00:00:00 |
SQLのBETWEENを使用する際に、開始値または終了値がNULLの場合、その条件は常にFALSEと評価されます。
特に「開始値」または「終了値」がNULLになってしまうと返されなくなるため、注意が必要です。
実際のコードの例は、以下の通りです。
SELECT * FROM sample WHERE id BETWEEN 2 AND NULL;
上記のコードは検索範囲にNULLが含まれているため、結果が返されません。
同様に、NOT BETWEENの場合も開始値または終了値がNULLの場合、その条件は常にFALSEと評価されます。
SELECT * FROM sample WHERE id NOT BETWEEN 2 AND NULL;
上記コードの場合も、結果が返されません。
SQLには、BETWEENに似た機能の「IN句」があります。IN句は、複数の条件判定をまとめておこなう際に使用する命令です。
BETWEENは「1から3」のような範囲指定、IN句は「1と3」のような複数指定という違いがあります。
BETWEENも文字列の範囲検索に使用できますが、使用する際にはアルファベット順や文字コード順に基づいて範囲が決まることを覚えてください。一方でIN句は、特定の文字列を指定して検索するため、制約はありません。
使用する際は「WHERE カラム名 IN( 値1, 値2, 値3…)」と記述します。IN句を使用しなくても複数条件を指定できますが、値が増えるほど記述が多くなり、コードの可読性が低くなってしまいます。そのため、IN句は探す要素が多いほど有効です。
IN句の主な使い方は、以下の3つです。
それぞれ詳しく解説します。
IN句は対象の要素名の後ろにつけることで使用でき、指定された複数の値から一致するものを検索します。
実際のコードの例は、以下の通りです。
SELECT * FROM sample WHERE name IN(‘one‘,‘two‘,‘four‘);
上記コードの場合、nameが「one」「two」「four」のデータが取得されるため、実行結果は以下のようになります。
id | name | date |
---|---|---|
1 | one | 2023-01-01 00:00:00 |
2 | two | 2023-01-01 00:20:00 |
4 | four | 2023-01-02 10:00:00 |
該当しない要素を調べたい場合は、「NOT IN句」を使います。
ただしSQLの否定形は、「条件に該当しないものをすべて検索する」という処理です。そのため、安易に扱うと内部でデータの全検索が始まってしまいます。
検索対象のレコード数が増えると、NOT INは検索に時間を要する重い処理になります。膨大なデータを管理している場合、NOT INの使用は特に注意しましょう。
NOT IN句を使用した実際のコードの例は以下の通りです。
SELECT * FROM sample WHERE name NOT IN(‘one‘,‘two‘,‘four‘);
上記コードの場合、nameが「one」「two」「four」以外のデータが取得されるため、実行結果は以下のようになります。
id | name | date |
---|---|---|
3 | three | 2023-01-02 00:00:00 |
5 | five | 2023-01-03 00:00:00 |
IN句をサブクエリとして使う場合は、IN句の中にSELECT文を記述します。実際のコードの例は、以下の通りです。
SELECT * FROM テーブルA WHERE カラム名 IN ( SELECT カラム名 FROM テーブルB );
このように記述すると、まずはテーブルBから条件に該当したデータが取得され、その後で取得したデータを使用してテーブルAからデータが取得されます。2つのテーブルを用いた実際のコードの例は以下の通りです。
sampleテーブル
id | name | date |
---|---|---|
1 | one | 2023-01-01 00:00:00 |
2 | two | 2023-01-01 00:20:00 |
3 | three | 2023-01-02 00:00:00 |
4 | four | 2023-01-02 10:00:00 |
5 | five | 2023-01-03 00:00:00 |
testテーブル
test_id | number |
---|---|
001 | 1 |
002 | 10 |
003 | 100 |
004 | 1000 |
SELECT * FROM sample WHERE id IN ( SELECT number FROM test );
上記コードの場合、testテーブルの「number」データを取得し、取得したデータとsampleテーブルの「id」データが一致したものがsampleテーブルから抽出されます。
id | name | date |
---|---|---|
1 | one | 2023-01-01 00:00:00 |
本記事では、BETWEENの使い方や似た機能の使い方を解説しました。BETWEENやIN句を活用することで、可読性の高いコードにできます。
BETWEENとIN句の役割は似ていますが、範囲指定したい場合はBETWEEN、複数指定したい場合はIN句と状況によって使い分けることをおすすめします。
BETWEENやIN句はコードの可読性改善に役立つため、本記事を参考に、ぜひ使い方を覚えてみてください。
2024.06.17
子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介
#プログラミングスクール
2022.01.06
【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説
#プログラミングスクール
2024.01.26
【未経験でも転職可】30代におすすめプログラミングスクール8選!
#プログラミングスクール
2024.01.26
初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説
#JAVA
2024.01.26
忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説
#プログラミングスクール
2022.01.06
【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介
#プログラミングスクール
2024.01.26
【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説
#プログラミングスクール
2024.01.26
【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説
#プログラミングスクール