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

広告

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

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

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

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

サンプル

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

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

p22-1

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

p22-2

p22-3

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

mysql> select * from customer 
    -> where name <> all (select name from newcustomer);

p22-4

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

( Written by Tatsuo Ikura )