サブクエリ(副問い合わせ)とは、SELECT又はINSERTUPDATEDELETEの各ステートメントの内部又は別のサブクエリの内部で入れ子になっているクエリ(問い合わせ)である。

SELECT句のサブクエリ

SELECT文のSELECT句にサブクエリを指定することができる。

SELECT empno, salary, (SELECT AVG(salary) FROM employee) AS avg_salary FROM employee

WHERE句のサブクエリ

SELECT及びINSERT、UPDATE、DELETEのWHERE句にサブクエリを指定することができる。

examテーブル
student day score
堀内まり菜 2012-03-31 40
堀内まり菜 2013-03-31 70
飯田來麗 2012-03-31 80

examテーブルからstudent毎のdayが最大の行を抽出するSQLは次のとおり。

SELECT student, day, score
FROM exam e1
WHERE e1.day = (
    SELECT MAX(day)
    FROM exam e2
    WHERE e1.student = e2.student
)

上記のサブクエリを使ったSQLは、次のようにJOINでも実現できる。

SELECT e1.student, e1.day, e1.score
FROM exam e1 JOIN exam e2 ON (e1.student = e2.student)
GROUP BY e1.student, e1.day, e1.score
HAVING e1.day = MAX(e2.day)

相関サブクエリ

相関サブクエリ(相関副問い合わせ)とは、外側クエリのテーブルを参照するサブクエリである。相関サブクエリのサンプルを示す。

SELECT * FROM table1 t1 WHERE 1 IN (
  SELECT foo FROM table2 t2 WHERE t1.id = t2.id
)
このエントリーをはてなブックマークに追加
スポンサーリンク
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送