結合の種類 |
説明 |
例 |
等価結合 |
|
WHERE句で複数の表の列を等号"="を指定して、結合すること |
SELECT e.FIRST_NAME, e.LAST_NAME, d.DEPARTMENT_NAME
FROM EMPLOYEES e, DEPARTMENTS d
WHERE e.DEPARTMENT_ID=d.DEPARTMENT_ID |
自然結合/内部結合:NATURAL JOIN
(SQL:1999) |
結合する表において、一致する名前とデータ型を持つ列に基づいて自動的に結合が行われる |
SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_NAME
FROM EMPLOYEES
NATURAL JOIN DEPARTMENTS |
自然結合/内部結合:USING
(SQL:1999) |
NATURAL JOIN
では、共通する列全てが結合される為、一部の列だけを結合条件として明示する際に使用する |
SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_NAME
FROM EMPLOYEES
JOIN DEPARTMENTS
USING (DEPARTMENT_ID) |
非等価結合 |
|
WHERE句で複数の表の列を等号"="以外を指定して、結合すること |
SELECT e.FIRST_NAME, e.LAST_NAME, j.GRADE_LEVEL
FROM EMPLOYEES e, JOB_GRADES j
WHERE e.SALARY BETWEEN j.LOWEST_SAL
AND j.HIGHEST_SAL; |
直積結合/クロス結合
(SQL:1999) |
2つの表から直積演算を戻す |
SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_NAME
FROM EMPLOYEES
CROSS JOIN DEPARTMENTS |
ON
(SQL:1999) |
|
SELECT e.FIRST_NAME, e.LAST_NAME, d.DEPARTMENT_NAME
FROM EMPLOYEES e
JOIN DEPARTMENTS d
ON (e.DEPARTMENT_ID=d.DEPARTMENT_ID) |
外部結合 |
|
WHERE句で条件の片方に"(+)"を指定することにより、指定した表の一致しないデータも戻すことができる |
SELECT e.FIRST_NAME, e.LAST_NAME, d.DEPARTMENT_NAME
FROM EMPLOYEES e, DEPARTMENTS d
WHERE e.DEPARTMENT_ID(+)=d.DEPARTMENT_ID |
左側外部結合
(SQL:1999) |
左側の表の一致しない行を戻す結合 |
SELECT e.FIRST_NAME, e.LAST_NAME, d.DEPARTMENT_NAME
FROM EMPLOYEES e
LEFT OUTER JOIN DEPARTMENTS d
ON (e.DEPARTMENT_ID=d.DEPARTMENT_ID) |
右側外部結合
(SQL:1999) |
右側の表の一致しない行を戻す結合 |
SELECT e.FIRST_NAME, e.LAST_NAME, d.DEPARTMENT_NAME
FROM EMPLOYEES e
RIGHT OUTER JOIN DEPARTMENTS d
ON (e.DEPARTMENT_ID=d.DEPARTMENT_ID) |
完全外部結合
(SQL:1999) |
両方の表の一致しない行を戻す結合 |
SELECT e.FIRST_NAME, e.LAST_NAME, d.DEPARTMENT_NAME
FROM EMPLOYEES e
OUTER JOIN DEPARTMENTS d
ON (e.DEPARTMENT_ID=d.DEPARTMENT_ID) |
自己結合
|
同じ表に別名を付けてFROM句で指定する |
SELECT e.FIRST_NAME, e.LAST_NAME, f.FIRST_NAME MANAGER_FN, f.LAST_NAME MANAGER_LN
FROM EMPLOYEES e, EMPLOYEES f
WHERE e.MANAGER_ID=f.EMPLOYEE_ID |
・結合対象の表に同じ列名がある場合は、表に別名をつけ列名をその別名で修飾するか(表の別名.列名)、または表名で列名を修飾(表名.列名)することにより列がどのの表の列かを判別できるようにします。