メインコンテンツにスキップ
モジュール 5 · レッスン 3 / 4コース内の 19/57~10 min
モジュールのレッスン (3/4)

OUTER JOIN: 「ギャップ」を見つける

モジュール 3 では、LEFT JOIN: すべて 行を左側に保持します。 右側に一致がない場合 (NULL になります)。この章では、 RIGHT JOIN と FULL OUTER JOIN を使用してツールキットを拡張すると、次のことがわかります。 それらを使用してデータ内の 「穴」 を見つける方法: 1 つのテーブル内の行 他に対応するものはありません。

3種類のOUTER JOIN

SQL
A LEFT  JOIN B  ON …  -- tutte le righe di A, con o senza match in B
A RIGHT JOIN B  ON …  -- tutte le righe di B, con o senza match in A
A FULL  JOIN B  ON …  -- tutte le righe di A *e* di B; NULL dove non c'è match

A RIGHT JOIN B は、常に同じ内容で B LEFT JOIN A として書き換えることができます。 ON: これは読みやすさの問題です。多くのスタイル(このコースを含む) 一貫性を保つために、常に LEFT JOIN を使用することを好みます。

「アンチ結合」パターン: 欠落しているものを見つける

LEFT JOIN の最も一般的な使用法は、「 right" ですが、** 一致しない左側の行を検索します。 そう**。これは anti-join と呼ばれます。

SQL
-- Prodotti senza nessuna recensione:
SELECT p.id, p.name
FROM   products p
LEFT JOIN reviews r ON r.product_id = p.id
WHERE  r.id IS NULL
ORDER BY p.id;

パターンロジック:

  1. LEFT JOIN は、各製品のレビューがある場合は添付します。
  2. レビューのない製品の場合、すべての r 列は NULL になります。
  3. WHERE r.id IS NULL はこれらの製品のみ を保持します。

キーのチェック: 右側のテーブルの NOT NULL 列の id IS NULL *「一致するものがありませんでした」*を意味します。右手のPKにフィルターをかけることが多いですね まさにこの理由からテーブルを作成します。

完全外部結合

FULL OUTER JOIN は、両方の側を一致させずに維持します。使用されることはほとんどありませんが、 通常はデータ整合性チェック用です。

SQL
SELECT c.id AS customer_id, o.id AS order_id
FROM   customers c
FULL OUTER JOIN orders o ON o.customer_id = c.id
WHERE  c.id IS NULL OR o.id IS NULL;

c.id IS NULL を持つ行は孤立した注文になります (customer_id customers には存在しません)。 o.id IS NULL が付いている人は顧客です 命令なしで。データセットでは、外部キーにより、孤立したキーが存在しないことが保証されます。 秩序が存在する。注文のない顧客だけが残ります。

自分で試してみてください

運動#sql.m5.l3.e1
試行回数: 0読み込み中…

Trova tutti i prodotti che non hanno mairicevuto una recensione。モストラ・ソロ・ラ・コロンナという名前。名前の通りオルディナ。

エディターを読み込み中…
ヒントを表示

パターンのアンチ結合: LEFT JOIN レビュー su product_id, poi WHERE r.id IS NULL。

3 回の試行後に解決策が利用可能になります

復習演習

運動#sql.m5.l3.e2
試行回数: 0読み込み中…

Trova i clienti che non hanno mai ordinato nulla.モストラメール。電子メールによるオルディナ。

エディターを読み込み中…
ヒントを表示

顧客の注文に応じて、ステッソ パターンを事前に決定します。

3 回の試行後に解決策が利用可能になります