■ 結合
- 正規化されたテーブルでは、必要なデータが分割されている場合が多い。
そこでデータを必要な形で取り出す為に、結合を使用する。
内部結合(Inner Join)
- 特に指定しない限りは、結合は、内部結合である。
以下の社員テーブルを参考に説明する。
[社員]
社員番号 | 氏名 | 上司社員番号 |
---|---|---|
0001 | ホムペ太郎 | |
0002 | ブログ次郎 | 0001 |
0003 | ソシャ三郎 | 0001 |
0004 | チャト花子 | 0002 |
まずは条件指定をせずに結合をしてみる。
SELECT * FROM 社員 AS A, 社員 AS B;
[直積]
A.社員番号 | A.氏名 | A.上司社員番号 | B.社員番号 | B.氏名 | B.上司社員番号 |
---|---|---|---|---|---|
0001 | ホムペ太郎 | 0001 | ホムペ太郎 | ||
0001 | ホムペ太郎 | 0002 | ブログ次郎 | 0001 | |
0001 | ホムペ太郎 | 0003 | ソシャ三郎 | 0001 | |
0001 | ホムペ太郎 | 0004 | チャト花子 | 0002 | |
0002 | ブログ次郎 | 0001 | 0001 | ホムペ太郎 | |
0002 | ブログ次郎 | 0001 | 0002 | ブログ次郎 | 0001 |
0002 | ブログ次郎 | 0001 | 0003 | ソシャ三郎 | 0001 |
0002 | ブログ次郎 | 0001 | 0004 | チャト花子 | 0002 |
0003 | ソシャ三郎 | 0001 | 0001 | ホムペ太郎 | |
0003 | ソシャ三郎 | 0001 | 0002 | ブログ次郎 | 0001 |
0003 | ソシャ三郎 | 0001 | 0003 | ソシャ三郎 | 0001 |
0003 | ソシャ三郎 | 0001 | 0004 | チャト花子 | 0002 |
0004 | チャト花子 | 0002 | 0001 | ホムペ太郎 | |
0004 | チャト花子 | 0002 | 0002 | ブログ次郎 | 0001 |
0004 | チャト花子 | 0002 | 0003 | ソシャ三郎 | 0001 |
0004 | チャト花子 | 0002 | 0004 | チャト花子 | 0002 |
列数: (A+B)、行数: (A*B)となる。
次に、条件を指定して結合してみる。
SELECT * FROM 社員 AS A, 社員 AS B WHERE A.上司社員番号 = B.社員番号;
[直積+選択]
A.社員番号 | A.氏名 | A.上司社員番号 | B.社員番号 | B.氏名 | B.上司社員番号 |
---|---|---|---|---|---|
0002 | ブログ次郎 | 0001 | 0001 | ホムペ太郎 | |
0003 | ソシャ三郎 | 0001 | 0001 | ホムペ太郎 | |
0004 | チャト花子 | 0002 | 0002 | ブログ次郎 | 0001 |
内部結合なので、テーブルAの上司社員番号がNULLの行は取り出されない。
次に、射影も追加して条件を指定して結合してみる。
SELECT A.社員番号 AS 社員番号,A.氏名 AS 氏名,B.氏名 AS 上司氏名 FROM 社員 AS A, 社員 AS B WHERE A.上司社員番号 = B.社員番号;
[直積+選択+射影]
社員番号 | 氏名 | 上司氏名 |
---|---|---|
0002 | ブログ次郎 | ホムペ太郎 |
0003 | ソシャ三郎 | ホムペ太郎 |
0004 | チャト花子 | ブログ次郎 |
同じテーブル同士を結合する事を、自己結合という。
外部結合(Outer Join)
- 外部結合には、左外部結合と、右外部結合がある。
一般的には、左外部結合を使用する。
以下の社員テーブルを参考に説明する。
[社員]
社員番号 | 氏名 | 上司社員番号 |
---|---|---|
0001 | ホムペ太郎 | |
0002 | ブログ次郎 | 0001 |
0003 | ソシャ三郎 | 0001 |
0004 | チャト花子 | 0002 |
SELECT A.社員番号 AS 社員番号,A.氏名 AS 氏名,B.氏名 AS 上司氏名 FROM 社員 AS A LEFT JOIN 社員 AS B ON A.上司社員番号 = B.社員番号;
[左外部結合]
社員番号 | 氏名 | 上司氏名 |
---|---|---|
0001 | ホムペ太郎 | ←表Aの上司社員番号に値がないが取り出される |
0002 | ブログ次郎 | ホムペ太郎 |
0003 | ソシャ三郎 | ホムペ太郎 |
0004 | チャト花子 | ブログ次郎 |
一方のテーブルの全行を対象とし、結合を行うことが外部結合の使用される理由である。
【試験対策】
- 結合には、内部結合と、外部結合がある。
- 内部結合は、ある共通の列の値一致をもって結合する。
- 外部結合を使う理由:結合する一方の表に値のないデータを取り出すことが出来るから。