時々、別のクエリの中で、SQLクエリをする必要があります。このコンセプト(概念)は、サブクエリと呼ばれ、この章は、サブクエリにどのように取り組むかを目的としています。

1. 独立したサブクエリ

全ての従業員の平均給与よりも給与の高い全ての従業員に関するデータが欲しいと仮定しましょう。

SELECT emp.First_name AS firstName, emp.Last_name AS lastName, emp.Salary
FROM Employee AS emp
WHERE emp.Salary >= (
	SELECT AVG( e.salary )
	FROM Employee AS e
)

下記の表となります。

{{h}}
{{r}}

2. 相関サブクエリ

それぞれの部署で一番初めに働き始めた従業員に関するデータが欲しいとしましょう。

SELECT dep.Name AS Department, emp.First_name, emp.Last_name, emp.Start
FROM Employee AS emp, Department AS dep
WHERE emp.Department_ID = dep.ID AND emp.Start = (
	SELECT MIN(e.Start)
	FROM Employee AS e
	WHERE e.Department_ID = emp.Department_ID
)

下記の表となります。

{{h}}
{{r}}

まとめ

サブクエリは、フィルタリングに基づいてデータが事前に取得された時に使用することが出来ます。上記の一つ目の例で、全従業員の平均給与のデータが最初に取得される必要があります。これは、下記のようなサブクエリによって成されます:

SELECT AVG( e.salary )
FROM Employee AS e

サブクエリがメインクエリに関連している時、サブクエリは相関であると考えられます。上記の2つ目の例の中で、サブクエリは現在の従業員の部署内で、各従業員に最も古い開始日を与えます。それゆえに、サブクエリは従業員の部署に従属しています。その従属は下記のように示せます:

e.Department_ID = emp.Department_ID