内接続と外接続(左右)の違い

1743 ワード

データベース:
内部ジョインと外部ジョイン:
内部接続は、2つのテーブルの共通部分Cを取得するものであり(一方のテーブルのIDは、他方のテーブルの接続フィールドである)
select * from A,B where A.Aid=B.Bnameid Select * from A JOIN B ON A.Aid=B.Bnameid

の運転
結果は同じです.
外部ジョイン:左ジョインと右ジョイン
左接続(Left JOIN):図3共通部分記録セットC+表A記録セットA 1である.
select * from A Left JOIN B ON A.Aid=B.Bnameid
右接続(Right JOIN):図3共通部記録セットC+表B記録セットB 1.
  
select * from A Right JOIN B ON A.Aid=B.Bnameid
以上の演算解説を通して、上記の状況(図3の関係図を含む)はAがBの左側にある場合だけを説明していると多くの人が考えていると思います.
次の文BがAの右側にある場合はどうなりますか.
select * from B Left JOIN A ON A.Aid=B.Bnameid
select * from B Right JOIN A ON A.Aid=B.Bnameid

実は図3を左右に反転すると以下の結論が得られる.
select*from B Left JOIN A ON A.Aid=B.Bnameidとselect*from A Right JOIN B ON A.Aid=B.Bnameidで得られたレコードセットは同じである
そして
select*from B Right JOIN A ON A.Aid=B.Bnameidとselect*from A Left JOIN B ON A.Aid=B.Bnameidで得られたレコードセットも同様である.
--表stu
id  name   
1,  Jack
2,  Tom
3,  Kity
4,  nono
--表exam
id   grade
1,   56
2,   76
11,  89
 
ないぶせつぞく
select stu.id,exam.id,stu.name, exam.grade from stu inner join exam on stu.id=exam.id
stu.id   exam.id  name     grade
--------------------------------
1 1 Jack 56
2 2 Tom 76
 
 
左接続(join左のテーブルのすべてのデータが表示され、examは2つのレコードしかないのでstu.id、gradeはNULLで表示されます)
select stu.id,exam.id,stu.name, exam.grade from stu left join exam on stu.id=exam.id
1 1 Jack 56
2 2 Tom 76
3 NULL Kity NULL
4 NULL nono NULL
 
右接続(接続とは逆にjoin右テーブルのすべてのデータを表示)
select stu.id,exam.id,stu.name, exam.grade from stu right join exam on stu.id=exam.id
1 1 Jack 56
2 2 Tom 76
NULL 11 NULL 89