SQLのIN句とは、指定した複数の値に合致するデータを抽出するための方法です。複数の値を抽出するための方法は他にもありますが、IN句を使用することでより簡単にコーディングできます。
また、IN句を使いこなすことで、より細かい検索条件を設定も可能です。そこでSQLのIN句の使い方や基本構文、NOT IN句と似た機能の使い方を解説します。
目次
SQLのIN句とは、指定した複数の値に合致するデータを抽出するための便利な方法です。IN句を使用することで、特定のカラムが指定した値のリストの中のどれかひとつと一致する行を検索できます。
たとえば、特定のテーブルのnameカラムに含まれる特定の名前のリストに一致する行を取得したい場合には、IN句を使用することで簡単に実現できます。
これにより、複数の値を個別に検索する必要がなく、一度のクエリで必要なデータの抽出が可能です。
SQLのIN句は、条件文をより短く記述できます。ここからは、SQLのIN句の使い方を3つ解説します。
IN句の基本的な構文は、以下のとおりです。
SELECT * FROM [テーブル名] WHERE [カラム名] IN([値1,値2,値3…]);
たとえば、name_listというテーブルがあった場合、以下のように記述することで条件に合った行を取得できます。
SELECT * FROM name_list WHERE name IN("田中", "吉田");
上記の命令文を実行すると、name_listテーブルのname列から値が「田中」「吉田」と一致する行のみを取得することが可能です。
SQLのIN句では、一般的には単一のカラムに対して複数の値を指定します。しかし、一部のデータベースシステムでは、複数カラムの組み合わせを用いたIN句の使用もサポートされています。この場合、複数のカラムのペアを条件として指定が可能です。
たとえば、name_listテーブルからageが9でnameが「田中」、またはageが11でnameが「吉田」のカラムを取得する場合には、以下のように指定します。
SELECT * FROM name_list WHERE (age,name) IN ((9,"田中"),(11,"吉田"));
上記の例では2カラムの指定のみですが、対応するデータベースシステムでは、かっこ内の記述を増やすことによって3カラム・4カラム以上の指定も可能です。ただし、この機能はすべてのデータベースでサポートされているわけではないため、使用するシステムのドキュメントを確認してください。
IN句を使用することで、構文内で指定した複数の値に合致するデータを簡単に抽出できますが、IN句を使わずに同じ結果をえる方法もあります。
SELECT * FROM name_list WHERE name="田中" OR name="吉田";
上記のようにWHERE句から複数の条件をORで結ぶことにより、IN句と同じ結果がえられます。しかし、IN句の方が命令文の記述がより短くなり、とくに複数のカラムや多数の値を指定する際にORを使うと記述が膨大になってしまいます。そのため、複数の値に対する検索ではIN句の使用がおすすめです。
SQLには、IN句と反対の機能を持つNOT IN句があります。NOT IN句を使用すると、指定した値に該当しない要素をすべて抽出できます。NOT IN句は、以下のように記述して使用が可能です。
SELECT * FROM name_list WHERE name NOT IN ("田中","吉田");
上記の命令文を実行することで、name_listテーブルから「田中」と「吉田」以外のnameを持つすべてのレコードを抽出できます。ただし、レコード数が多いテーブルでは、NOT IN句の使用によりパフォーマンスが低下する可能性があるため注意が必要です。
サブクエリとは、他のSQL文(SELECT、UPDATEなど)の中で実行されるSELECT文を指します。これにより、ひとつのクエリの結果を別のクエリの基準として使用することが可能です。IN句やNOT IN句の中にサブクエリを加えることで、その結果をデータの取得に使用します。
サブクエリを使用したSQL文の例は、以下のとおりです。
SELECT * FROM name_list WHERE name NOT IN (SELECT name FROM black_list);
上記の命令文は、name_listテーブルからblack_listテーブルに存在しないnameを持つすべてのレコードを取得します。
すなわち、ブラックリストに登録されていないすべてのnameのレコードが取得されるのです。
BETWEEN演算子は、SQLのIN句と似た処理をするものです。
SQLにおけるIN句は、指定した個別の値のリストに合致するデータの抽出に使用されますが、BETWEEN演算子は連続する値の範囲を指定する際に用いられます。たとえば、「A地点からB地点の間」というような数値や日付の範囲を指定して検索する際に使用されます。
BETWEEN演算子では、数値だけでなく日付や文字列に対しても条件指定が可能です。適切に利用することで、範囲指定での命令をより短く簡潔に記述が可能です。
SQLのBETWEEN演算子には、4つの使い方があります。
ここからは、それぞれの使い方について解説します。
SQLのBETWEEN演算子を使うことで、開始値と終了値の範囲で検索ができます。BETWEEN演算子の基本的な構文は、以下のとおりです。
SELECT * FROM テーブル名 WHERE カラム名 BETWEEN 開始値 AND 終了値;
たとえば、idカラムが2から6までのレコードを取得する場合、以下のように記述しましょう。
SELECT * FROM name_list WHERE id BETWEEN 2 AND 6;
BETWEEN演算子を使った構文での「2から6の間」という範囲は、「2以上6以下」という言葉に言い換えられます。そのため、上記の命令文は以下の命令文と同じ意味になります。
SELECT * FROM name_list WHERE id >= 2 AND id <= 6;
SQLのBETWEEN演算子を使うことで、日付の範囲を指定して検索できます。BETWEEN演算子を使用した日付の範囲指定の例文は、以下のとおりです。
SELECT * FROM name_list WHERE datetime BETWEEN 2023-10-02 00:00:00 AND 2023-10-03 23:59:59;
ここで重要なのは、日付と時間は文字列として扱われるため、シングルクォートまたはダブルクォートで囲む必要があることです。また、「2023-10-03」と単独で指定した場合、デフォルトで「2023-10-03 00:00:00」と解釈されます。
そのため、特定の日を完全にカバーするためには、日付の終わりを「23:59:59」と指定する必要があります。これにより、指定した日付の全体を範囲に含めることが可能です。
SQLのBETWEEN演算子は、文字列での検索にも使用できます。BETWEEN演算子を使用した文字列での検索の例は、以下のとおりです。
SELECT * FROM name_list WHERE name BETWEEN "a" AND "g";
上記の命令を実行することで、nameカラムに「a」から「g」まで(’g’を含む)の値を持つすべてのレコードが取得されます。文字列の範囲検索は、文字列の辞書順に基づいておこなわれます。
ただし、この種の検索は特定の文字列の範囲を正確に把握する必要があるため、場合によっては混乱を招くことがあるでしょう。
そこで文字列範囲検索を使用する際には、検索対象となるデータの特性をよく理解しておくことが重要です。また、想定外の結果を避けるために、クエリを慎重に設計する必要があります。
SQLのBETWEEN演算子は、否定形でも使用できます。BETWEEN演算子を使用した否定形での検索は、以下のように実施します。
SELECT * FROM name_list WHERE id NOT BETWEEN 2 AND 6;
上記の命令文を実行することで、idが2よりも小さいレコードと7より大きいレコードがすべて取得されます。このように、NOT BETWEENは指定した範囲以外の値に対して使用され、特定の範囲外のデータを取得する際に役立ちます。
SQLのNOT IN句とBETWEEN演算子を使う際は、検索に使用するカラムの値にNULLが含まれていると注意しなければなりません。SQLでは、NULLは「不明」または「値がない」ことを意味し、他の値との比較結果は通常「UNKNOWN」です。
たとえば、name列の値のどれかにNULLがある場合、BETWEEN演算子はNULLとの比較をすると、UNKNOWNという結果を返します。
このUNKNOWNは、真偽値のFALSEとは異なります。とくにBETWEEN演算子で開始値か終了値にNULLがある場合は、取得される結果のすべてがUNKNOWNとなる可能性があります。NOT IN句とBETWEEN演算子を使用する際には、NULLに対しての注意が必要です。
SQLにおいてIN句は、指定した値に対する一致をチェックするのに使用され、LIKE句は特定のパターンに一致する文字列を検索するために使われます。これらの句は異なる目的で使用されますが、一部のケースでは同時使用も可能です。
たとえば、特定の条件下でLIKE句とIN句を組み合わせて使用できますが、これはクエリの目的やデータベースの設計によって異なります。一方で、条件が複雑になる場合やパフォーマンスに影響を与える可能性がある場合、代替手段としてOR句や正規表現を使用することがあるでしょう。
OR句を使用する代替方法は、とくに条件がシンプルな場合に適していますが、条件が多くなると命令文が長く複雑になる可能性があります。正規表現を使用する方法は、より複雑なパターンマッチングを効率的にできますが、適切な正規表現の知識が必要です。
そのため、IN句とLIKE句の使用は、特定の要件とデータベースの設計に応じた検討が重要です。これにより、データベースのクエリの効率と可読性を最適化できます。
SQLのIN句は、指定した複数の値に合致するデータを抽出するための便利な方法です。命令文内で複数の値を指定することで、それらの値と一致するカラムをシンプルに検索できます。
またIN句と似た処理ができるBETWEEN演算子もあり、こちらは開始値と終了値の間の範囲指定が可能です。本記事を参考に、ぜひSQLの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選!失敗しない選び方も徹底解説
#プログラミングスクール