サブクエリを使った検索条件の設定

広告

サブクエリとはSELECT文で取得した結果を他のSELECT文やUPDATE文の中で利用する使い方です。主にはWERE句の中で使用されることが多いのですがそれには限定されません。またサブクエリを利用できる文はSELECT文、INSERT文、UPDATE文、DELETE文、SET文、DO文のいずれかだけです。

まずはWHERE句の中でカラムの値などと比較する値としてサブクエリを使う方法について試してみます。例えば次のように使います。

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

サブクエリのSELECT文は全体を括弧で囲んで記述します。

WHERE句の条件としてサブクエリが記述されており、サブクエリのSELECT文で取得した値とカラムの値を比較しています。比較演算子を使った比較を行う場合はサブクエリは1つのカラムの値だけを取得し、そして取得するデータは1つだけでなければなりません。このようにサブクエリを使うことで、他のテーブルから取得した何らかの値を使って別のSELECT文やINSERT文などを実行することができます。

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

サンプル

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

mysql> create table students (id int, name varchar(10));
mysql> create table result (id int, score int);

p20-1

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

p20-2

p20-3

サブクエリを実際に使ってみる前に、まず「resutl」テーブルの「score」カラムの値が一番大きいデータを取得してみます。次のように入力します。

mysql> select * from result order by score desc limit 1;

p20-4

ではこの取得したデータの「id」カラムの値と同じ値を持つ「student」テーブルのデータを取得してみます。

mysql> select * from students 
    -> where id = (select id from result order by score desc limit 1);

p20-5

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

( Written by Tatsuo Ikura )