まず、oracleが評価するためにこの問合せをどのように変換するかを理解する必要があります。
SELECT w1.name
, w1.continent
, w1.population
FROM world w1
WHERE 25000000 >= ALL(SELECT w2.population
FROM world w2
WHERE w2.continent=w1.continent
);
次に、オプティマイザは、その後さらに変換をオプティマイザを任意の比較演算子および相補比較演算子
SELECT w1.name
, w1.continent
, w1.population
FROM world w1
WHERE NOT(25000000 < ANY (SELECT w2.population
FROM world w2
WHERE w2.continent=w1.continent)
);
を使用して同等の条件にサブクエリが続くすべての比較演算子を使用する条件を変換します2番目のクエリは、ANY比較演算子で条件を変換するためのルールを使用し、その後に相関サブクエリが続きます。
SELECT w1.name
, w1.continent
, w1.population
FROM world w1
WHERE
NOT EXISTS (SELECT w2.population
FROM world w2
WHERE w2.continent=w1.continent
AND 25000000 < w2.population
);
これは、私はあなたの質問についてはOracleソースLink
から取られています
- はいオラクルは、このの世話をする、変換が示唆として、Oracleはより良いquery.But上記の変換を理解する方法をどのようにこのエンド結果クエリの作業。
- はい、これは相関サブクエリなしでも実行できますが、同じ大陸を持つテーブル内の他のレコードを比較する必要があるため、同じテーブルに結合する必要があります。私が間違っていれば私を修正してください]
は、ここでデータ/クエリのフィドルです:http://sqlfiddle.com/#!4/2aed1/1 – Wilduck