モジュールのレッスン (3/4)
OUTER JOIN: 「ギャップ」を見つける
モジュール 3 では、LEFT JOIN: すべて 行を左側に保持します。
右側に一致がない場合 (NULL になります)。この章では、
RIGHT JOIN と FULL OUTER JOIN を使用してツールキットを拡張すると、次のことがわかります。
それらを使用してデータ内の 「穴」 を見つける方法: 1 つのテーブル内の行
他に対応するものはありません。
3種類のOUTER JOIN
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'è matchA RIGHT JOIN B は、常に同じ内容で B LEFT JOIN A として書き換えることができます。
ON: これは読みやすさの問題です。多くのスタイル(このコースを含む)
一貫性を保つために、常に LEFT JOIN を使用することを好みます。
「アンチ結合」パターン: 欠落しているものを見つける
LEFT JOIN の最も一般的な使用法は、「
right" ですが、** 一致しない左側の行を検索します。
そう**。これは anti-join と呼ばれます。
-- 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;パターンロジック:
LEFT JOINは、各製品のレビューがある場合は添付します。- レビューのない製品の場合、すべての
r列はNULLになります。 WHERE r.id IS NULLはこれらの製品のみ を保持します。
キーのチェック: 右側のテーブルの NOT NULL 列の id IS NULL
*「一致するものがありませんでした」*を意味します。右手のPKにフィルターをかけることが多いですね
まさにこの理由からテーブルを作成します。
完全外部結合
FULL OUTER JOIN は、両方の側を一致させずに維持します。使用されることはほとんどありませんが、
通常はデータ整合性チェック用です。
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 が付いている人は顧客です
命令なしで。データセットでは、外部キーにより、孤立したキーが存在しないことが保証されます。
秩序が存在する。注文のない顧客だけが残ります。
自分で試してみてください
Trova tutti i prodotti che non hanno mairicevuto una recensione。モストラ・ソロ・ラ・コロンナという名前。名前の通りオルディナ。
ヒントを表示
パターンのアンチ結合: LEFT JOIN レビュー su product_id, poi WHERE r.id IS NULL。
3 回の試行後に解決策が利用可能になります
復習演習
Trova i clienti che non hanno mai ordinato nulla.モストラメール。電子メールによるオルディナ。
ヒントを表示
顧客の注文に応じて、ステッソ パターンを事前に決定します。
3 回の試行後に解決策が利用可能になります