LEFT OUTER JOIN演算

LEFT OUTER JOIN演算は、join節を記述できるJOIN演算の一つです。 この演算では最初の(左の)表にて、一致する行が二つ目の(右の)表にない行は、二つ目の表のNULLの行に結合されたものとして、結果に残ります。

構文

表式 LEFT [ OUTER ] JOIN 表式
{
    ON 真偽式 
    }

ON節にあるいずれの真偽式も、直接の表と直接の問い合わせ文にあるいかなる表を参照することができます。 ON節は結合されていない表を参照することもできますし、結合されている表を参照しなくともかまいません。(ただし一般的には参照します。)

例 1

--都市に対応するアジアの国

SELECT CITIES.COUNTRY, CITIES.CITY_NAME, REGION 
FROM Countries 
LEFT OUTER JOIN Cities
ON CITIES.COUNTRY_ISO_CODE = COUNTRIES.COUNTRY_ISO_CODE
WHERE REGION = 'Asia'

-- LEFT JOINという別の書き方により、前例と同じ結果を
-- 実現する。

SELECT  COUNTRIES.COUNTRY, CITIES.CITY_NAME,REGION 
FROM COUNTRIES 
LEFT JOIN CITIES 
ON CITIES.COUNTRY_ISO_CODE = COUNTRIES.COUNTRY_ISO_CODE
WHERE REGION = 'Asia'

例 2


-- EMPLOYEEとDEPAETMENTという表を結合して、
-- 1930より前に生まれた(BIRTHDATE)全ての社員の、
-- 社員番号(EMPNO)と、
-- 社員の苗字(LASTNAME)と、
-- 部署番号(EMPLOYEEという表のWORKDEPTと、DEPARTMENTという表のDEPTNO)と、
-- 部署名(DEPTNAME)を選択する。

SELECT EMPNO, LASTNAME, WORKDEPT, DEPTNAME 
   FROM SAMP.EMPLOYEE LEFT OUTER JOIN SAMP.DEPARTMENT 
   ON WORKDEPT = DEPTNO 
   AND YEAR(BIRTHDATE) < 1930

-- 管理者のいない部署を含め全ての部署を、
-- 部署の管理者の社員番号と苗字と共に一覧する。

SELECT DEPTNO, DEPTNAME, EMPNO, LASTNAME
      FROM DEPARTMENT LEFT OUTER JOIN EMPLOYEE
	    ON MGRNO = EMPNO