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));
テーブルには次のようなデータを追加してあります。
では「newcustomer」テーブルのデータの中で「name」カラムの値が「customer」テーブルに格納されているデータと一致するものがあるデータを取得してみます。
mysql> select * from customer where exists -> (select name from newcustomer where customer.name = newcustomer.name);
サブクエリを使って「newcustomer」テーブルの中に一致するデータがあるかどうかを調べ、一致するものがあったデータを「customer」テーブルから取得することができました。
( Written by Tatsuo Ikura )