ホームページ >データベース >mysql チュートリアル >内部結合、左外部結合、右外部結合、およびクロス結合の違いは何ですか?

内部結合、左外部結合、右外部結合、およびクロス結合の違いは何ですか?

怪我咯
怪我咯オリジナル
2017-06-23 13:39:565435ブラウズ

内部結合、左外部結合、右外部結合、クロス結合の違い

以前、私はMSSQLの内部結合と外部結合で得られるデータセットについてよくわかりませんでした。ここ数日で SQL の本を再度見直しましたが、その考え方は非常に明確になっているはずです。ここで、皆さんに読んでいただけるように私の理解を共有します。 SQL 接続ステートメントを理解していない私のような友人が役立つことを願っています。 (こんな料理のチュートリアルを投稿するなんて笑わないでください、笑:D) テーブル A と B が 2 つあります。テーブル A の構造は次のとおりです: Aid: int; 識別シード、主キー、自動インクリメント ID Aname: varchar データの状況、つまり select * from A を使用したレコードの状況を以下の図 1 に示します。

図 1: テーブル A データテーブル B の構造は次のとおりです: Bid: int; 識別シード、主キー、自動インクリメント ID Bnameid: int データ状況、つまり select * from を使用したレコード状況B を以下の図 2 に示します。


2: テーブル B データ
入札と補助を区別し、誰もが誤解しないように、入札の開始シードは 100 に設定されます。 SQL の基本的な知識がある人は、2 つのテーブルを接続するには接続フィールドが必要であることを知っています。上記のテーブルのデータから、テーブル A の Aid とテーブル B の Bnameid が 2 つの接続フィールドであることがわかります。以下の図 3 は、接続されているすべてのレコード セット間の関係を示しています。

図 3: 接続関係図
次に、内部接続と外部接続について 1 つずつ説明します。
1. 内部結合: 内部結合を使用して、2 つのテーブルの共通部分のレコード、つまり図 3 のレコード セット C を取得します。ステートメントは次のとおりです。 Select * from A JOIN B ON A.Aid=実行結果は以下の図 4 に示されています。実際には、A.Aid=B.Bnameid の select * from A,B と Select * from A JOIN B ON A.Aid=B.Bnameid の結果が示されています。同じだ。

図 4: 内部結合データ
2. 外部結合: 外部結合には 2 種類あり、1 つは左結合 (Left JOIN) と右結合 (Right JOIN) です
(1) 左結合 (左 JOIN): つまり、図 3 の公開部分レコード セット C + テーブル A のレコード セット A1。
ステートメントは次のとおりです: select * from A Left JOIN B ON A.Aid=B.Bnameid
実行結果を以下の図 5 に示します。



図 5: 左結合データ
説明:ステートメント、A は B の左側にあり、左結合であるため、計算方法は次のようになります: A は B のレコードを左結合します = 図 3 パブリック部分レコード セット C + テーブル A レコード セット A1
図 3 、レコード セット C の既存の Aid は次のとおりです: 2 3 6 7 8
図 1 では、テーブル A のすべてのレコード セット A に存在する Aid は次のとおりです: 1 2 3 4 5 6 7 8 9

レコードに存在する Aidテーブル A のセット A1 = (図 1、つまりテーブル A の All Aid)-(図 3 のレコード セット C に存在する援助)、最終結果は次のようになります: 1 4 5 9
これにより、次のレコードが得られます。図 5 の A を B に接続したままにする = 図 3 パブリック部分レコード セット C + テーブル A レコード セット A1、最終結果を図 5 に示します。Bnameid と Bid が NULL ではないレコードがレコードであることがわかります。図 3 のレコード セット C のパブリック部分では、Bnameid と Bid が NULL である Aid は 1 4 5 9 です。このレコードは、テーブル A のレコード セット A1 に存在する Aid です。

(2) Right JOIN: これは、図 3 の公開部分レコード セット C + テーブル B レコード セット B1 です。

ステートメントは次のとおりです: select * from A Right JOIN B ON A.Aid=B.Bnameid 実行結果を以下の図 6 に示します。


図 6: 右結合データ

説明: ステートメント内, A は左側の B にあり、Right Join なので、計算方法は次のようになります: B の右側の接続レコード = 図 3 パブリック部分のレコード セット C + テーブル B のレコード セット B1 図 3 では、既存の Aidレコード セット C の Bnameid は次のとおりです。 2 3 6 7 8
図 2 では、テーブル B のすべてのレコード セット B に存在する Bnameid は次のとおりです。 2 3 6 7 8 11
テーブル B のレコード セット B1 に存在する Bnameid = (図 2 では、レコード セット C に存在するテーブル B)-(図 3 では、Aid) のすべての Bnameid が計算され、最終結果は次のようになります: 11
これから、A のレコードは正しい接続であると結論付けることができます。図 6 の B = 図 3 パブリック部分レコード セット C + テーブル B レコード セット B1、最終的に取得 図 6 の結果から、NULL 以外の Aid と Aname を持つレコードはすべて、レコードのパブリック部分のレコードであることがわかります。図 3 のセット C、Aid と Aname が NULL である Aid 11 のレコードは、テーブル B のレコード セット B1 に存在する Bnameid です。
相互接続: 2 つのテーブルが条件なしで結合される場合、エントリの数 = 図 1 * 図 2

以上が内部結合、左外部結合、右外部結合、およびクロス結合の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。