2017-08-20 16 views
-1

このクエリを理解する上で問題があります。特に、サブクエリのWHEREがあります。私はそれが達成していることを実際には得ていない。どんな助けもありがとう。ありがとうSQL結合クエリでClarityが必要になる

# Find the largest country (by area) in each continent. Show the continent, 
# name, and area. 
SELECT continent, name, area 
FROM countries AS a 
WHERE area = (
SELECT MAX(area) 
FROM countries AS b 
WHERE a.continent = b.continent 
) 
+0

私はあなたが学習サイトからの質問であることを知っていますが、どちらを覚えていません。これは何度も前に尋ねられていますが、あなたが学びたいサイトの起源を知らずに見つけることができません。そのサイト名を検索して、どのような回答が出てきているかを確認してください。 – DRapp

答えて

0

サブクエリは国の最大領域を検出しています。どの国?外部クエリで国の大陸と一致するすべての国。

したがって、各国については、同じ大陸の最大の国の面積を取得します。

WHERE句には、「この2つの領域は同じですか - この地域の最大面積と面積ですか?」と記載されています。最大の面積を持つ国のみを選択します。

+0

あなたの助けをありがとう – jsc42

1

は、国のデータの次のサブセットを考えてみましょう:

 
Continent  Country Area 
North America USA  3718691 
North America Canada 3855081 
North America Mexico 761602 
Europe   France 211208 
Europe   Germany 137846 
Europe   UK  94525 
Europe   Italy 116305 

これは、次のように振る舞う相関クエリです:

  1. は、外側のクエリ(北米、米国で返される最初の行を読み込みます、37186​​91)
  2. 北米のa.continentと相関関係があるサブクエリを実行し、北アメリカの最大領域である3855081を返します。
  3. whereは、3855081が作業中の行の領域と一致するかどうかをチェックします。
  4. 外部クエリの次の行が読み込まれるように一致しないため、今回は手順1で2番目の行を処理します。
  5. 外部クエリのすべての行について繰り返します。

    2行目と4行目を見ると、手順4.が一致して、クエリによってそれらの行が返されるようになります。

    あなたの国のテーブルでこのデータを使用してクエリを実行すると、結果を確認できます。

    これは、すべての国のサブクエリを繰り返すため、大陸あたり最大面積の国を決定するうえで非常に貧弱な方法です。私のサンプルデータを使用して、北アメリカの最大面積を3回、ヨーロッパの最大面積を4回決定します。あなたがあなたのコメントに尋ねたので、次のように

、私はこのクエリを記述します。

SELECT a.continent, a.name, a.area 
FROM countries AS a 
    inner join (select continent, max(area) max_area 
       from countries 
       group by continent) as b on a.continent = b.continent 
WHERE a.area = b.max_area 

をクエリのこのバージョンでは、各大陸の最大は一度のみ決定されます。元の照会は、相関照会を示すために書かれており、それらを理解することが重要です。複雑なロジックを解決するために、相関クエリを使用することがよくあります。

+0

これは非常に役に立ち、詳細を本当に感謝しています。このクエリを実行するより効率的な方法は何でしょうか? – jsc42

+0

@ jsc42私のバージョンの質問を回答 – LAS

+0

に追加しました。サブクエリに参加することで、サブクエリの結果を繰り返して実行することなく、1回のショットでAテーブルとして各国に追加しますか?もしそうなら、それは実際に私にはもっと意味をなさない。 – jsc42

関連する問題