INNER JOIN 演算 INNER JOIN 演算

INNER JOINとは、明示的な結合句を記述することができる、JOIN 演算です。

構文 表式 [ INNER ] JOIN 表式 { ON 真偽式 }

ONに真偽式を記述することで、結合句が記述できます。

ON clausepart of INNER JOIN expressionON節にある式では、直接の表および、外部の問い合わせ文から、直接のSELECT文までの間にある表が可視です。 以下の例ではON節は直接の表を参照しています。 SELECT * FROM SAMP.EMPLOYEE INNER JOIN SAMP.STAFF ON EMPLOYEE.SALARY < STAFF.SALARY

ON節では結合されていない表を参照することができます。また結合している表を参照しなくてもかまいません。(一般的には参照します。)

-- EMP_ACTとEMPLOYEEという表を結合します。 -- EMP_ACTという表より全列を選択して、 -- EMPLOYEEという表より従業員の苗字(LASTNAME)をそれぞれの行に -- 加えます。 SELECT SAMP.EMP_ACT.*, LASTNAME FROM SAMP.EMP_ACT JOIN SAMP.EMPLOYEE ON EMP_ACT.EMPNO = EMPLOYEE.EMPNO -- EMPLOYEEとDEPARTMENTという表を結合して、 -- 1930年より前に生まれた(BIRTDATE)全ての従業員の、 -- 従業員番号(EMPNO)、従業員の苗字(LASTNAME)、 -- 部署番号(EMPLOYEEという表のWORKDEPTと、DEPARTMENTという表のDEPTNO)、 -- 部署名(DEPTNAME)を選択する。 SELECT EMPNO, LASTNAME, WORKDEPT, DEPTNAME FROM SAMP.EMPLOYEE JOIN SAMP.DEPARTMENT ON WORKDEPT = DEPTNO AND YEAR(BIRTHDATE) < 1930 -- VALUES節から選択する問い合わせ(select文の一例)により値を"生成"する別の例 -- この問い合わせにより、一行の情報を持つ"R1"と"R2"という2列の"x"という表を -- どのように導出するのか示す。 SELECT * FROM (VALUES (3, 4), (1, 5), (2, 6)) AS VALUESTABLE1(C1, C2) JOIN (VALUES (3, 2), (1, 2), (0, 3)) AS VALUESTABLE2(c1, c2) ON VALUESTABLE1.c1 = VALUESTABLE2.c1 -- This results in: -- C1 |C2 |C1 |2 -- ----------------------------------------------- -- 3 |4 |3 |2 -- 1 |5 |1 |2 -- 全ての部署を、管理者の苗字と従業員番号と共に一覧する。 SELECT DEPTNO, DEPTNAME, EMPNO, LASTNAME FROM DEPARTMENT INNER JOIN EMPLOYEE ON MGRNO = EMPNO -- 全ての従業員の従業員番号と苗字を、 -- その管理者の従業員番号と苗字と共に一覧する。 SELECT E.EMPNO, E.LASTNAME, M.EMPNO, M.LASTNAME FROM EMPLOYEE E INNER JOIN DEPARTMENT INNER JOIN EMPLOYEE M ON MGRNO = M.EMPNO ON E.WORKDEPT = DEPTNO