集中力なら売り切れたよ

プログラミングや、将棋などについて書きます。

ON 句は結合条件、WHERE 句は抽出条件

ON 句 は 結合するための条件で「XXX の場合だけ XXX とくっつけて」という意味。
WHERE 句は FROM 句の結合がすべて終わった後の、抽出する条件。

SQL

SELECT
        e.emp_no, e.emp_name, d.dept_no, d.dept_name
    FROM
        emp e
        LEFT OUTER JOIN dept d
            ON e.dept_id = d.id AND d.dept_no = '20'
    ORDER BY
        e.emp_no

結果

EMP_NO EMP_NAME DEPT_NO DEPT_NAME
7369 SMITH 20 RESEARCH
7499 ALLEN null null
7521 WARD null null
7566 JONES 20 RESEARCH
7654 MARTIN null null
7698 BLAKE null null
7782 CLARK null null
7788 SCOTT 20 RESEARCH
7839 KING null null
7844 TURNER null null
7876 ADAMS 20 RESEARCH
7900 JAMES null null
7902 FORD 20 RESEARCH
7934 MILLER null null

SQL

SELECT
        e.emp_no, e.emp_name, d.dept_no, d.dept_name
    FROM
        emp e
        LEFT OUTER JOIN dept d
            ON e.dept_id = d.id
    WHERE
        d.dept_no = '20'
    ORDER BY
        e.emp_no

結果

EMP_NO EMP_NAME DEPT_NO DEPT_NAME
7369 SMITH 20 RESEARCH
7566 JONES 20 RESEARCH
7788 SCOTT 20 RESEARCH
7876 ADAMS 20 RESEARCH
7902 FORD 20 RESEARCH

ON 句の抽出の過程は『プログラマのためのSQL 第2版』に解説があるが、結論だけいうと左外部結合の場合、左側は必ず 1 行は結果に現れるということ。

プログラマのためのSQL 第2版

プログラマのためのSQL 第2版