Developer

【SQL基礎】相関副問い合わせ
2021.02.28
Lv1

【SQL基礎】相関副問い合わせ

本項では相関副問い合わせについて説明していきます。


相関副問い合わせとは

副問い合わせについてはこちらの記事を参照してください。

副問い合わせのSELECT文で主問い合わせのテーブルの列を参照するものを相関副問い合わせ(相関サブクエリ)と言います。

以下は相関副問い合わせの例となります。


相関副問い合わせの処理の流れ

相関副問い合わせでは以下のような流れで処理が行われていきます。

①外側のSELECT文を1行分だけ実行

外側の「SELECT id,name FROM teachers」について、teachersテーブルの最初の1行目だけ実行し、結果を取り出します。(2回目は2行目分、3回目は3行目分…..)

 

②取り出した結果を副問い合わせに代入して実行

①で取り出した1行を副問い合わせの文中のT1に代入し実行します。

ここでT1.addressは「東京都」になるため、代入するとSQL文は次のようになります。


SELECT MIN(score) FROM teachers as T2

WHERE T1.’東京都’ = T2.address

この処理の結果は東京都の最小スコアの「50」となります。

 

③外側のSLECT文における1行目のWHERE句の判定を行う。

②により外側のSQL文は次のようになります。


SELECT id,name FROM teachers as T1

WHERE score > 50

以上は外側のSQL文実行における1行目の処理ですが、①~③をすべての行について同様に行うと相関副問い合わせの結果になります。

↓東京都および埼玉県の最小スコア以外のデータが表示されました。


今回の学習ポイント

・相関副問い合わせでは、内側のクエリは外側のクエリの結果1行ごとに実行される。

・行間の値を比較する時に相関副問い合わせを利用すると便利。


練習問題

問題として使用するデータは「SQL練習問題」のものを使用しています。

以下からダウンロード可能です。

以下のようにしてworldcup2014データベースを作成し、インポートしてください。

※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。

worldcup2014.sql

[sql]

CREATE DATABASE worldcup2014;

USE worldcup2014;

Source C/worldcup2014.sql

[/sql]

 

  1. countriesテーブルの中から平均ランキングより低い国を表示する。
答え
[sql]

SELECT name,ranking,group_name

FROM countries as t1

WHERE t1.ranking < (SELECT AVG(ranking)

           FROM countries as t2

           WHERE t1.group_name = t2.group_name);

[/sql]

今回は各グループの平均ランキングを基準に、その平均ランキングより高い国を表示しました。

以上、相関副問い合わせについてでした。

 

 

連載目次リンク

SQL基礎 連載目次

関連する連載リンク

SQL練習問題 一覧まとめ