MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのサブクエリではEXISTSとINのどちらを使うべき?使い分けのポイントを解説

EXISTSとINの基本的な違い

EXISTSは、サブクエリが1件でも結果を返すかどうかを判定するために使用される演算子です。一方、INは、ある値が指定した値の集合やサブクエリの結果の中に含まれているかどうかを比較するために使用されます。INでは具体的な値(リテラル値)を用いて比較を行います。

ポイント: サブクエリの結果セットが非常に小さい場合にはINが推奨されます。逆に、サブクエリの結果が非常に大きい場合にはEXISTSを使用するのが適しています。これは、MySQLのオプティマイザがそれぞれの演算子を異なる方法で処理するためで、データ量に応じてパフォーマンスに大きな差が生じることがあります。

それでは、小規模なサブクエリの結果に対して推奨される「IN」の使用例を実際に見ていきましょう。

サンプルテーブルの作成

まず、デモ用のテーブルを作成します。

mysql> create table InSubQueryDemo
   -> (
   -> PNumber int,
   -> PName varchar(100)
   -> );
Query OK, 0 rows affected (0.60 sec)

レコードの挿入

次に、作成したテーブルにレコードを挿入します。

mysql> insert into InSubQueryDemo values(1,'Laptop');
Query OK, 1 row affected (0.17 sec)

mysql> insert into InSubQueryDemo values(2,'WirelessKeyboard');
Query OK, 1 row affected (0.21 sec)

mysql> insert into InSubQueryDemo values(3,'WirelessMouse');
Query OK, 1 row affected (0.12 sec)

全レコードの表示

テーブル内のすべてのレコードを確認します。

mysql> select *from InSubQueryDemo;

実行結果は以下の通りです。

+---------+------------------+
| PNumber | PName            |
+---------+------------------+
|       1 | Laptop           |
|       2 | WirelessKeyboard |
|       3 | WirelessMouse    |
+---------+------------------+
3 rows in set (0.00 sec)

INとサブクエリを組み合わせた実行例

以下は、IN句にサブクエリを組み合わせ、「PNumber」が1より大きいレコードを取得する構文です。

mysql> select *from InSubQueryDemo
   -> where PNumber IN (select PNumber from InSubQueryDemo WHERE PNumber > 1);

実行すると、以下のような出力が得られます。

+---------+------------------+
| PNumber | PName            |
+---------+------------------+
|       2 | WirelessKeyboard |
|       3 | WirelessMouse    |
+---------+------------------+
2 rows in set (0.04 sec)

このように、IN句はサブクエリの結果が少数の場合に効率的に動作します。条件に合致する「PNumber」が2と3のレコードのみが取得できていることがわかります。大規模なデータセットを扱う場合は、EXISTSとの性能比較を行い、最適な方を選択することをおすすめします。

  1. MySQLで行を取得する際のAND演算子とOR演算子の違いとは?

    MySQLにおけるAND演算子とOR演算子の違いANDとORの違いは次の通りです。ANDは、指定された両方の条件がすべて真(true)でなければ、全体の条件が真になりません。一方、ORは、どちらか一方の条件が真であれば、全体の条件が真になります。サンプルテーブルの作成まず、以下のコマンドでテーブルを作成しましょう。mysql> create table demo70-> (-> id int not null auto_increment primary key,-> name varchar(20),-> age int-> );Query OK, 0 r

  2. MySQLデータベースの作成と使い方を徹底解説!初心者向け基本ステップ

    MySQLデータベース操作の基本ステップMySQLのインストールが完了し、SQL文の入力方法を理解したら、いよいよデータベースへアクセスできるようになります。ここでは、データベース内のテーブルからデータを取得するまでの一連の手順を順番に見ていきましょう。サーバーへの接続データベースの作成テーブルの作成テーブルへのデータ投入テーブルからのデータ取得既存のデータベースを確認する新しいデータベースを作成する前に、まず環境にすでに存在するデータベースを把握しておくことが重要です。以下のクエリを実行することで、現在利用可能なデータベースの一覧を確認できます。クエリmysql> SHOW DATAB