SQL ステートメントの join キーワードについては、よく使われるキーワードですが、理解しにくいため、次の例で簡単に説明します。テーブル table1、table2 を作成します。
create table table1(id int,name varchar(10))
テーブル作成 table2(id int,score int)
table1 に挿入 select 1,'lee'
table1 に挿入 select 2,'zhang'
table1 に挿入 select 4,'wang'
table2 に挿入 select 1,90
insertテーブル 2 に 2,100 を選択
テーブル 2 に挿入 3,70 を選択
テーブルと同様に
-------------------------------------- ------- -------------------
テーブル 1 | テーブル 2 |
----------------------------------- - --------------------------------
ID 名 |ID スコア |
1 リー |1 90 |
2 チャン|2 100 |
4 王 |3 70 |
------------------------------------- ------- -------
以下はすべてクエリ アナライザーで実行されます
1. 外部結合
1. 概念: 左外部結合、右外部結合、または完全外部結合を含む
2. 左結合: 左結合または左外部結合
(1) 左外部結合の結果セットには、結合列に一致する行だけでなく、LEFT OUTER 句で指定された左テーブルのすべての行が含まれます。左側のテーブルの行に右側のテーブルに一致する行がない場合、右側のテーブルのすべての選択リスト列は、関連する結果セット行で null になります。
(2)SQL文
select * from table1 left join table2 on table1.id=table2.id
-------------結果-------------
ID 名前 ID スコア
---------------------------------
1 李 1 90
2 張 2 100
4 wang NULL NULL
--------------------------------
注: table1 のすべての句が含まれており、対応するフィールドを返します。 table2の指定された条件に従い、一致しないものはnullとして表示されます
3. 右結合:右外部結合または右外部結合
(1) 右外部結合は、左外部結合の逆結合です。右側のテーブルのすべての行が返されます。右側のテーブルの行に左側のテーブルに一致する行がない場合、左側のテーブルには NULL が返されます。
(2)SQL文
select * from table1 right join table2 on table1.id=table2.id
-------------結果-------------
ID 名前 ID スコア
---------------------------------
1 李 1 90
2 張 2 100
NULL NULL 3 70
--------------------------------
注: table2 のすべての句が含まれており、対応するフィールドを返します。
4. 完全外部結合: 完全外部結合
(1) 完全外部結合は、左側のテーブルと右側のテーブルのすべての行を返します。行に別のテーブルに一致する行がない場合、他のテーブルの選択リスト列には NULL 値が含まれます。テーブル間に一致する行がある場合、結果セットの行全体にベース テーブルのデータ値が含まれます。
(2)SQL文
select * from table1 full join table2 on table1.id=table2.id
-------------結果-------------
ID 名前 ID スコア
---------------------------------
1 李 1 90
2 張 2 100
4 wang NULL NULL
NULL NULL 3 70
------------------------------------------------
注: 次の合計を返します。左と右の連結 (上記の左、右結合を参照)
2. 内部結合
1. 概念: 内部結合は、結合される列の値を比較するために比較演算子を使用する結合です
2. : join または inner join
3.sql ステートメント
select * from table1 join table2 on table1.id=table2.id
-------------結果--------- ----
ID名IDスコア
----- ----------------------------------
1 lee 1 90
2 zhang 2 100
-------------- --------------
注: table1 と table1 の列のみを返します。条件を満たす table2
4. 同等 (以下と同じ実行結果)
A: select a.*, b.* from table1 a,table2 b where a.id=b.id
B:select * from table1クロス結合 table2 where table1.id=table2.id (注: クロス結合後の条件の追加に使用できるのは where のみです)
3. クロス結合 (完了)
1. WHERE を使用しないクロス結合。句は、結合に含まれるテーブルのデカルト積を生成します。最初のテーブルの行数と 2 番目のテーブルの行数を乗算すると、デカルト積の結果セットのサイズに等しくなります。 (table1 と table2 のクロス結合は 3*3=9 レコードを生成します)
2. クロス結合: クロス結合 (条件なし where...)
3.sql ステートメント
select * from table1cross join table2
-- ----------結果---------------
ID名IDスコア
----------- --------
1李1 90
2張1 90
4王1 90
1李2 100
2張2 100
4王2 100
1李3 70
2張3 70
4 wang 3 70
---------------------------------
注: 3*3=9 レコードを返します。デカルト積
4 と同等 (以下と同じ実行効果)
A:select * from table1,table2