# 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

親トピック: JOIN 演算