EXISTSキーワード付きのサブクエリ

広告

サブクエリの前にEXISTSを指定すると、サブクエリが1つでもデータを返した場合に条件式がTRUEとなります。書式は次の通りです。

SELECT col_name1 FROM tbl_name1
  WHERE EXISTS (SELECT * FROM tbl_name2 WHERE ...);

EXISTSを付けた場合、サブクエリがデータを返すかどうかだけを判断するのでサブクエリで取得したデータを何かと比較するということは行いません。取得するカラムは通常「*」を指定しますが任意のカラムを指定しても構いません。ただその場合でも「*」を指定した場合と同じ扱いになります。

サンプル

実際に試してみます。まず次のようなテーブルを作成します。

mysql> create table newcustomer (id int, name varchar(10));
mysql> create table customer (id int,  name varchar(10));

p23-1

テーブルには次のようなデータを追加してあります。

p23-2

p23-3

では「newcustomer」テーブルのデータの中で「name」カラムの値が「customer」テーブルに格納されているデータと一致するものがあるデータを取得してみます。

mysql> select * from customer where exists
    -> (select name from newcustomer where customer.name = newcustomer.name);

p23-4

サブクエリを使って「newcustomer」テーブルの中に一致するデータがあるかどうかを調べ、一致するものがあったデータを「customer」テーブルから取得することができました。

( Written by Tatsuo Ikura )