SQL

最終更新日: 2024.01.25 (公開: 2024.01.17)

SQLのBETWEENとは?検索する範囲を指定する方法を解説

SQLのBETWEENとは?検索する範囲を指定する方法を解説

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とは?

 

SQLのBETWEENは、数値や日付などの範囲を指定して検索する機能です。主に、WHERE句で条件指定する際に使われます。

使用する際は、「WHERE カラム名 BETWEEN 開始値 AND 終了値」のように記述します。

BETWEENを使わずに「<」や「=」などの記号を組み合わせても処理はできますが、BETWEENを使うことで可読性の向上が期待できるのです。可読性の高さは記述ミスやバグの防止に直結するため、プログラミングにおいて特に重視したいポイントといえます。

SQLのBETWEENの使い方5つ

 

SQLのBETWEENの主な使い方は以下の5つです。

  • 開始値と終了値で以上以下を指定して検索する
  • 日付の範囲を指定して検索する
  • SQLのBETWEENで複数条件を指定する
  • 文字列で検索する
  • SQLのBETWEENを否定する

それぞれ詳しく解説します。

開始値と終了値の範囲で以上以下を指定して検索する

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で複数条件を指定する

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を否定する

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が絡むときの注意点

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句とは?

letsusinganaconda

SQLには、BETWEENに似た機能の「IN句」があります。IN句は、複数の条件判定をまとめておこなう際に使用する命令です。

BETWEENは「1から3」のような範囲指定、IN句は「1と3」のような複数指定という違いがあります。

BETWEENも文字列の範囲検索に使用できますが、使用する際にはアルファベット順や文字コード順に基づいて範囲が決まることを覚えてください。一方でIN句は、特定の文字列を指定して検索するため、制約はありません。

使用する際は「WHERE カラム名 IN( 値1, 値2, 値3…)」と記述します。IN句を使用しなくても複数条件を指定できますが、値が増えるほど記述が多くなり、コードの可読性が低くなってしまいます。そのため、IN句は探す要素が多いほど有効です。

SQLのBETWEENと似た機能であるIN句の使い方

Ruby入門のための学習方法

IN句の主な使い方は、以下の3つです。

  • 指定要素の後ろにINをつける
  • NOT IN句を使用する
  • IN句をサブクエリとして使う

それぞれ詳しく解説します。

指定要素の後ろにINをつける

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句を使用する

該当しない要素を調べたい場合は、「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句をサブクエリとして使う場合は、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

SQLのBETWEENやIN句を使って条件を指定して検索しよう

 

本記事では、BETWEENの使い方や似た機能の使い方を解説しました。BETWEENやIN句を活用することで、可読性の高いコードにできます。

BETWEENとIN句の役割は似ていますが、範囲指定したい場合はBETWEEN、複数指定したい場合はIN句と状況によって使い分けることをおすすめします。

BETWEENやIN句はコードの可読性改善に役立つため、本記事を参考に、ぜひ使い方を覚えてみてください。

アクセスランキング 人気のある記事をピックアップ!

    コードカキタイがオススメする記事!

    1. 子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介

      2024.01.26

      子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介

      #プログラミングスクール

    2. 【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説

      2022.01.06

      【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説

      #プログラミングスクール

    3. 【未経験でも転職可】30代におすすめプログラミングスクール8選!

      2024.01.26

      【未経験でも転職可】30代におすすめプログラミングスクール8選!

      #プログラミングスクール

    4. 初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説

      2024.01.26

      初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説

      #JAVA

    5. 忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説

      2024.01.26

      忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説

      #プログラミングスクール

    1. 【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介

      2022.01.06

      【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介

      #プログラミングスクール

    2. 【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説

      2024.01.26

      【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説

      #プログラミングスクール

    3. 【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説

      2024.01.26

      【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説

      #プログラミングスクール

    4. 【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説

      2024.01.26

      【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説

      #プログラミングスクール

    5. 【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説

      2024.01.26

      【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説

      #プログラミングスクール