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

広告

サブクエリの前にANY又はSOMEを指定すると、サブクエリが返す複数のデータと順に比較を行い、いずれかの値との比較がTRUEを返す場合に条件式がTRUEとなります。書式は次の通りです。

SELECT col_name1 FROM tbl_name1
  WHERE col_name1 = ANY (SELECT col_name2 FROM tbl_name2);

ANYを付けた場合、サブクエリは取得するカラムは1つしか指定できませんが、取得するデータは複数取得することができます。そして取得した全てのデータに対して指定した比較演算子を使って比較を行い、いずれかのデータとの比較でTRUEとなった場合に条件式はTRUEとなります。

上記では「=」演算子を用いていますが「<」や「>=」など他の比較演算子でも同じように使うことができます。

なおSOMEはANYのエイリアスとなっておりANYの代わりにSOMEを使用することもできます。

サンプル

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

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

p21-1

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

p21-2

p21-3

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

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

p21-4

サブクエリを使って「newcustomer」テーブルから値を取得し、いずれかの値に一致するデータを「customer」テーブルから取得することができました。

( Written by Tatsuo Ikura )