サーチ…
備考
副問合せは、外部問合せの異なる句で、またはset操作で使用できます。
それらはかっこ()
囲む必要があります。サブクエリの結果が他のものと比較される場合は、列の数が一致する必要があります。テンポラリテーブルに名前を付けるには、FROM句のサブクエリにテーブルエイリアスが必要です。
WHERE句の副問合せ
サブクエリを使用して結果セットをフィルタリングします。たとえば、最高給与従業員に等しい給与を持つすべての従業員を返します。
SELECT *
FROM Employees
WHERE Salary = (SELECT MAX(Salary) FROM Employees)
FROM句の副問い合わせ
FROM
句の副問合せは、問合せの実行中に生成された後に失われる一時表と同様に機能します。
SELECT Managers.Id, Employees.Salary
FROM (
SELECT Id
FROM Employees
WHERE ManagerId IS NULL
) AS Managers
JOIN Employees ON Managers.Id = Employees.Id
SELECT句の副問い合わせ
SELECT
Id,
FName,
LName,
(SELECT COUNT(*) FROM Cars WHERE Cars.CustomerId = Customers.Id) AS NumberOfCars
FROM Customers
FROM句のサブクエリ
サブクエリを使用して、一時テーブルを定義し、それを「外部」クエリのFROM句で使用できます。
SELECT * FROM (SELECT city, temp_hi - temp_lo AS temp_var FROM weather) AS w
WHERE temp_var > 20;
上記は、毎日の温度変化が20より大きい天気表から都市を検出します 。結果は次のとおりです。
シティ | temp_var |
---|---|
セントルイス | 21 |
ロサンゼルス | 31 |
ロサンゼルス | 23 |
ロサンゼルス | 31 |
ロサンゼルス | 27 |
ロサンゼルス | 28 |
ロサンゼルス | 28 |
ロサンゼルス | 32 |
。
WHERE句のサブクエリ
次の例では、母集団が平均的な気温を下回る都市( 都市の例 )を検索します(サブqqueryで取得)。
SELECT name, pop2000 FROM cities
WHERE pop2000 < (SELECT avg(pop2000) FROM cities);
ここでは、サブクエリ(SELECT avg(pop2000)FROM cities)を使用してWHERE句の条件を指定します。結果は次のとおりです。
名 | ポップ2000 |
---|---|
サンフランシスコ | 776733 |
セントルイス | 348189 |
カンザスシティー | 146866 |
SELECT句のサブクエリ
副問合せは、外部問合せのSELECT
部分でも使用できます。次のクエリでは、 weatherテーブルのすべての列とcitiesテーブルの対応する状態が示されます 。
SELECT w.*, (SELECT c.state FROM cities AS c WHERE c.name = w.city ) AS state
FROM weather AS w;
異なるテーブルのクエリを使用してクエリ結果をフィルタリングする
このクエリは、スーパーバイザテーブルにないすべての従業員を選択します。
SELECT *
FROM Employees
WHERE EmployeeID not in (SELECT EmployeeID
FROM Supervisors)
LEFT JOINを使用しても同じ結果が得られます。
SELECT *
FROM Employees AS e
LEFT JOIN Supervisors AS s ON s.EmployeeID=e.EmployeeID
WHERE s.EmployeeID is NULL
相関サブクエリ
相関関係(SynchronizedまたはCoordinatedとも呼ばれます)サブクエリは、外部クエリの現在の行を参照するネストされたクエリです。
SELECT EmployeeId
FROM Employee AS eOuter
WHERE Salary > (
SELECT AVG(Salary)
FROM Employee eInner
WHERE eInner.DepartmentId = eOuter.DepartmentId
)
副問合せSELECT AVG(Salary) ...
は、その外部問合せからEmployee
行eOuter
参照するため、 相関関係にあります。