INNER JOIN 演算

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

構文

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

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

ON節にある式では、直接の表および、外部の問い合わせ文から、直接の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