セミ結合とアンチ結合を使ったサブクエリ

SQLのデータ結合

Maham Faisal Khan

Senior Content Developer, DataCamp

結合のおさらい

idフィールドでINNER JOINする仕組み

2つのテーブルを示す図:左テーブルと右テーブル。 2つのクエリを結合した結果が右側に表示され、両方のテーブルで id 列が一致したレコードのみが返されます。

SQLのデータ結合

加算的な結合

SELECT *
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id;
SQLのデータ結合

加算的な結合

加算的結合を説明する図。 左側には、右と左側に2つのテーブルが表示されています。 右側には、2つのテーブルのID列を使用したINNER JOINの結果が表示されています。 異なる名前のフィールドは元の名前が入ります。 日付フィールドは両方のテーブルにあるため、2回追加されます。

SQLのデータ結合

セミ結合

セミ結合は、2つ目のテーブルで条件が満たされている場合に、1つ目のテーブルのレコードが選択されます。

セミ結合を説明するために使用される2つのテーブル、左テーブルと右テーブルの図。左テーブルにはIDと列1の2つの列があり、右テーブルには列が1つだけ(列2)があります。

SQLのデータ結合

セミ結合

2つのテーブル、左テーブルと右テーブルがセミ結合の説明に使われている図。列2が列1を絞り込むために使用されます。 left_table のレコードのうち、col1 が col2 に一致しないものは薄く表示されています。

SQLのデータ結合

セミ結合

右と左、2つのテーブルを示す図。 両方のテーブルに対するセミ結合の結果が右側に表示されています。 col1と一致するものがcol2で見つかった場合のみ、left_tableのレコードが返されます。 これらは id 2 と 3 に対応します。

SQLのデータ結合

セミ結合してみましょう

SELECT country, continent, president
FROM presidents;
| country  | continent     | president               |
| -------- | ------------- | ----------------------- |
| Egypt    | Africa        | Abdel Fattah el-Sisi    |
| Portugal | Europe        | Marcelo Rebelo de Sousa | 
| USA      | North America | Joe Biden               |
| Uruguay  | South America | Luis Lacalle Pou        |
| Pakistan | Asia          | Asif Ali Zardari        |
| Chile    | South America | Gabriel Boric           |
| India    | Asia          | Droupadi Murmu          |
SQLのデータ結合

セミ結合を組み立てる

SELECT country
FROM states
WHERE indep_year < 1800;
|----------|
| country  |
|----------|
| Portugal |
| Spain    |
|----------|
SQLのデータ結合

【サブクエリ】セミ結合を完成させる

SELECT president, country, continent
FROM presidents
WHERE country IN
    (SELECT country
     FROM states
     WHERE indep_year < 1800);
|-------------------------|-----------|-------------|
| president               | country   | continent   |
|-------------------------|-----------|-------------|
| Marcelo Rebelo de Sousa | Portugal  | Europe      |
|-------------------------|-----------|-------------|
SQLのデータ結合

アンチ結合

左テーブルと右テーブルの2つがアンチ結合を説明している図。列1を絞り込みするために列2が使用されます。 left_table のレコードで、col1 が col2 に一致しないものは NOT フェードアウトされています。

SQLのデータ結合

アンチ結合

右と左、2つのテーブルを示す図。 両方のテーブルに対するアンチ結合の結果が右側に表示されています。 列1内で列2に一致しない左テーブルのレコードのみが返されました。 これらは id 1 と 4 に対応します。

SQLのデータ結合

大統領テーブルでアンチ結合

SELECT country, president
FROM presidents
WHERE continent LIKE '%America' 
    AND country NOT IN
        (SELECT country
         FROM states
         WHERE indep_year < 1800);
| country  |  president       |
| -------- | ---------------- | 
| Uruguay  | Luis Lacalle Pou |
| Chile    | Gabriel Boric    |
SQLのデータ結合

練習しましょう!

SQLのデータ結合

Preparing Video For Download...