20040229

第4章 複数の表からのデータの表示

4-1 等価結合、外部結合、自己結合
■複数の表からデータを検索する場合、結合する必要がある。
結合の種類 説明
等価結合 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
  ・結合対象の表に同じ列名がある場合は、表に別名をつけ列名をその別名で修飾するか(表の別名.列名)、または表名で列名を修飾(表名.列名)することにより列がどのの表の列かを判別できるようにします。