84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
Pablo Santa Cruz による回答は正しいですが、このページに遭遇してさらに説明が必要な場合は、ここに詳細な内訳を示します。
次のテーブルがあるとします:
以下に示す内部結合:
では、以下に示すように、両方のテーブルに表示されるレコードのみを表示できます。 リーリー
接続のどちら側でレコードの欠落を許可するかを指定する必要があります。
と RIGHT JOIN は、LEFT OUTER JOIN と RIGHT OUTER JOIN の短縮形です。フルネームの下ではそれらを使用します。外部結合と内部結合の概念を強化します。 左外部結合
RIGHT JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
... は、次のように、右側のテーブルに一致があるかどうかに関係なく、左側のテーブルからすべてのレコードを取得します。 リーリー
完全外部結合
完全な外部結合では、もう一方のテーブルに一致があるかどうかに関係なく、両方のテーブルのすべてのレコードが得られます。一致しない場合は両側で NULL になります。結果は次のようになります:
は、「これら 2 つのクエリを実行し、その結果を積み重ねる」と考えることができます。一部の行は最初のクエリから取得され、一部の行は 2 番目のクエリから取得されます。
MySQL の
は完全な重複を排除することに注意することが重要です。ここでは両方のクエリに Tim が表示されますが、UNION の結果には Him が 1 回だけリストされます。私の同僚のデータベース専門家は、この動作に依存すべきではないと考えています。したがって、これをより明確にするために、2 番目のクエリに
UNION
句を追加できます。 リーリー 一方、何らかの理由で 重複を表示したい場合は、UNION ALL を使用できます。
一方、何らかの理由で
UNION ALL
MySQL には 完全な接続 はありませんが、エミュレートすることはできます 。
このスタック オーバーフローの質問から転写されたコードの場合 例 次のようになります。
リーリー
完全外部結合操作によって重複行が生成されない特殊なケースに適しています。上記のクエリは、UNION 集合演算子に依存して、クエリ パターンによって導入された重複行を削除します。 2 番目のクエリで anti-join パターンを使用し、次に UNION ALL セット演算子を使用して 2 つのセットを結合することで、重複行の導入を回避できます。完全外部結合が重複行を返すより一般的なケースでは、次のようにすることができます: リーリー
Pablo Santa Cruz による回答は正しいですが、このページに遭遇してさらに説明が必要な場合は、ここに詳細な内訳を示します。
テーブルの例
次のテーブルがあるとします:
リーリー内部結合
以下に示す内部結合:
リーリーでは、以下に示すように、両方のテーブルに表示されるレコードのみを表示できます。 リーリー
内部結合は明示的に双方向であるため、方向 (例: 左または右) がありません。両方の側が一致する必要があります。接続のどちら側でレコードの欠落を許可するかを指定する必要があります。
LEFT JOINと
左外部結合
RIGHT JOIN
は、LEFT OUTER JOIN
とRIGHT OUTER JOIN
の短縮形です。フルネームの下ではそれらを使用します。外部結合と内部結合の概念を強化します。以下に示す左外部結合:
リーリー... は、次のように、右側のテーブルに一致があるかどうかに関係なく、左側のテーブルからすべてのレコードを取得します。 リーリー
右外部結合リーリー
...次のように、左側のテーブルに一致するレコードがあるかどうかに関係なく、右側のテーブルからすべてのレコードを取得します。 リーリー完全外部結合
完全な外部結合では、もう一方のテーブルに一致があるかどうかに関係なく、両方のテーブルのすべてのレコードが得られます。一致しない場合は両側で NULL になります。結果は次のようになります:
リーリーただし、Pablo Santa Cruz 氏が指摘したように、MySQL はこれをサポートしていません。次のように、左結合と右結合の UNION を使用してエミュレートできます。 リーリー
UNIONは、「これら 2 つのクエリを実行し、その結果を積み重ねる」と考えることができます。一部の行は最初のクエリから取得され、一部の行は 2 番目のクエリから取得されます。
MySQL の
UNIONは完全な重複を排除することに注意することが重要です。ここでは両方のクエリに Tim が表示されますが、
WHEREUNION
の結果には Him が 1 回だけリストされます。私の同僚のデータベース専門家は、この動作に依存すべきではないと考えています。したがって、これをより明確にするために、2 番目のクエリに句を追加できます。 リーリー
一方、何らかの理由で
重複を表示したい場合は、UNION ALL
を使用できます。MySQL には 完全な接続 はありませんが、エミュレートすることはできます 。
このスタック オーバーフローの質問から転写されたコードの場合 例 次のようになります。
2 つのテーブル t1 と t2 があります:リーリー
上記のクエリは、
完全外部結合操作によって重複行が生成されない特殊なケースに適しています。上記のクエリは、UNION 集合演算子に依存して、クエリ パターンによって導入された重複行を削除します。 2 番目のクエリで anti-join パターンを使用し、次に UNION ALL セット演算子を使用して 2 つのセットを結合することで、重複行の導入を回避できます。完全外部結合が重複行を返すより一般的なケースでは、次のようにすることができます: リーリー