サイトアイコン ITC Media

【SQL】IN演算子の基本|実例付きでわかりやすく解説

(最終更新月:2023年5月)

✔以下の疑問をお持ちの方へ向けた記事です

「SQLのIN演算子とは何で、どのように使うのだろうか?」

「SQLのIN演算子の使い方を学びたい」

「SQLのIN演算子の具体的な使用例を見て理解したい」

✔この記事を読むことで得られる知識

この記事では、SQLのIN演算子の基本的な使い方から、その応用法まで、具体的な例を交えて詳細に説明します。

ぜひ最後までお読みください。

筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

SQLの基本的な概念

こちらでは、SQLとその基本的な概念についてお伝えしていきます。

SQLとは

SQL(Structured Query Language)は、リレーショナルデータベース管理システム(RDBMS)でデータを操作するための言語です。

SQLを扱えると、データベースに対して以下のような操作ができるようになります。

データベース構造そのものを扱うことを、DDL(Data Definition Language)といいます!

データベースとSQLの関係

データベースは情報を管理するためのシステムです。

SQLはそのデータベースとやり取りをするための言語

SQLはデータベースという「情報の海」から必要な情報だけを取り出す「釣り竿」のような存在といえるでしょう。

SQLの主要なコマンドの概要

SQLの主要なコマンドには、以下のようなものがあります。

これらのコマンドに付随する句(WHERE、IN、LIKEなど)を使うことで、より細かい操作やデータのフィルタリングが可能になるのです。

SQLのIN句の紹介

こちらでは、SQLのIN句についてお伝えします。

IN句の使い方を理解することで、データの選択範囲をより細かく制御できるようになります。

INの定義と機能

SQLの「IN」は、ある値が特定のリストに含まれているかどうかをチェックできる句です。

INを使うと、複数の値に対して一度に比較をおこなえるので、個々に比較するよりもコードがスッキリします。

IN句の基本的な使い方

INの基本的な使い方は以下のようになります。

SELECT * FROM table_name WHERE column_name IN (value1, value2, ...);

以下が説明です。

このSQL文は、column_nameの値が(value1, value2, ...)のいずれかと一致する行を全て選択します。

IN句の使用例

以下に、IN句の使用例を示します。

“employees”テーブルから、カラム「department」が、”Sales”または”Marketing”である従業員を選択しましょう。

SELECT * FROM employees WHERE department IN ('Sales', 'Marketing');

このSQL文は、”department”カラムの値が”Sales”または”Marketing”である全ての行を選択します。

SQLのNOT IN句の紹介

こちらでは、SQLのNOT IN句についてお伝えします。

NOT IN句は、IN句の逆の意味を持ち、ある値が特定のリストに含まれていないかどうかをチェックします。

NOT IN句の定義と機能

NOT IN句は、ある値が特定のリストに含まれていないかどうかをチェックするために使われます。

つまり、IN句が「含まれているか」をチェックするのに対して、NOT IN句は「含まれていないか」をチェックしているのです。

NOT IN句の基本的な使い方

NOT IN句の基本的な使い方は以下のようになります。

SELECT * FROM table_name WHERE column_name NOT IN (value1, value2, ...);

それぞれの変数に値を入れてください。

このSQL文は、column_nameの値が(value1, value2, ...)のいずれにも一致しない行を全て選択します。

NOT IN句の使用例

以下に、NOT IN句の使用例を示します。

例えば、”employees”テーブルから、列名「departmentが、”Sales”または”Marketing”でない全ての従業員を選択するには、次のように記述しましょう。

SELECT * FROM employees WHERE department NOT IN ('Sales', 'Marketing');

このSQL文は、「department」カラムの値が”Sales”または”Marketing”でない全ての行を選択します。

IN句とほかの句を比較

こちらでは、IN句とほかのSQL句を比較していきます。

SQLには多くの句があり、それぞれに適した用途があります。

INとBETWEENの比較

IN句とBETWEEN句の主な違いは、こちら。

したがって、INは離散的な値に対して、BETWEENは連続的な値に対して使用されます。

INとLIKEの比較

INとLIKEの主な違いは、以下のとおりです。

したがって、部分一致で検索したい場合にはLIKEを、完全一致で検索したい場合にはINを使用します。

INとEXISTSの比較

INとEXISTSは、サブクエリを使用してデータを検索する際にしばしば比較されます。

値の存在だけを確認したい場合にはEXISTSを、特定の値が結果セット内に存在するかを確認したい場合にはINを使用します。

IN句の応用:サブクエリとの組み合わせ

こちらでは、IN句をサブクエリと組み合わせて使う応用的な方法について説明します。

サブクエリを使うことで、より複雑な条件に基づくデータ抽出が可能になります。

サブクエリとINの基本的な組み合わせ方法

IN句とサブクエリを組み合わせる基本的な方法は以下のとおり。

SELECT * FROM table_name WHERE column_name IN (SELECT column_name FROM another_table);

ここでは以下がサブクエリです。

(SELECT column_name FROM another_table)

このSQL文は、column_nameの値がanother_tablecolumn_nameカラムに存在する行を全て選択します。

サブクエリとINを用いた具体的な使用例

サブクエリとIN句を組み合わせた使用例を示します。

例えば“customers”テーブルの全顧客が注文した全ての注文を、”orders”テーブルから選択するには、次のように記述します。

SELECT * FROM orders WHERE customer_id IN (SELECT customer_id FROM customers);

このSQL文は、”customer_id”の値が”customers”テーブルの”customer_id”カラムに存在する全ての行を選択します。

IN句の注意点とトラブルシューティング

こちらでは、IN句を使う際の注意点とトラブルシューティングについてお伝えします。

これらを理解することで、効率的に問題を解決することができます。

IN句とNULL値の関係

IN句を使用する際の一つの注意点は、NULL値との関係です。

NULLは特殊な値で、ほかの値との比較は常に「UNKNOWN」を返します。

したがって、IN句のリストにNULLが含まれていても、それに一致するとは判断されません。

IN句のパフォーマンスに関する注意点

IN句を使用する際のもう一つの注意点は、パフォーマンスです。

IN句のリストに多くの値が含まれていると、パフォーマンスが低下する可能性があります。

とくに大規模なデータベースでは、この影響は顕著です。

大量の値を持つリストでIN句を使用する場合は、ほかの方法(JOINやEXISTSなど)を検討しましょう。

実世界でのIN句の使用例

こちらでは、実際のビジネスシーンでのIN句の具体的な使用例についてお伝えします。

IN句はデータのフィルタリングやセグメンテーションに非常に便利なツールです。

カスタマーセグメンテーションでの使用例

特定の商品を購入した顧客のリストから、その顧客が他にどの商品を購入しているかを知りたいケースをご紹介します。

これにもIN句が使えるのです。

SELECT product_id, COUNT(*) FROM orders 
    WHERE customer_id IN (
          SELECT customer_id FROM customers 
                        WHERE purchased_product = 'product_name'
                         ) 
    GROUP BY product_id;

このクエリは、特定の商品を購入した顧客が他に購入した商品のリストを提供します。

データフィルタリングでの使用例

特定の基準に基づいてデータをフィルタリングする際にもIN句は役立ちます。

たとえば、特定の地域の顧客データのみを抽出したい場合は、以下のとおり。

SELECT * FROM customers WHERE region IN ('Tokyo', 'Osaka', 'Nagoya');

このクエリは、”Tokyo”、”Osaka”、”Nagoya”のいずれかの地域に住む顧客のデータを抽出します。

まとめ

当記事では、SQLのIN句とその使用方法について詳しく説明しました。

IN句の基本的な使い方はもちろん、場面別での使用法など、わからない方は手を動かして試してみましょう。

もしパソコン内に環境がないのであれば、以下のようなブラウザで操作できる環境もおすすめです。

無料なのでぜひ試してみてください。

SQL Fiddle - Online SQL Compiler for learning & practice
Discover our free online SQL editor enhanced with AI to chat, explain, and generate code. Support SQL Server, MySQL, Mar...
モバイルバージョンを終了