ANSI 표준 구문
: 연결에 사용하려는 컬럼 명이 같은 경우 USING( ), 다른 경우 ON( ) 사용
오라클 전용 구문
: FROM절에 ‘ , ’로 구분하여 합치게 될 테이블명을 기술하고,
WHERE절에 합치기에 사용할 컬럼명을 명시
두 개 이상의 테이블을 조인할 때 일치하는 값이 없는 행은 조인에서 제외
⭐ 기본적으로 JOIN은 INNER JOIN !
연결에 사용할 두 컬럼명이 다른 경우 : ON( )
📍 ANSI
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE FROM EMPLOYEE
JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
📍 오라클
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE = DEPT_ID;
연결에 사용할 두 컬럼명이 같은 경우 : USING( )
📍 ANSI
SELECT EMP_ID, EMP_NAME, JOB_CODE, JOB_NAME FROM EMPLOYEE
JOIN JOB USING (JOB_CODE);
📍 오라클 ← 별칭 사용
SELECT EMP_ID, EMP_NAME, E.JOB_CODE, JOB_NAME
FROM EMPLOYEE E, JOB J
WHERE E.JOB_CODE = J.JOB_CODE;
두 개 이상의 테이블을 조인할 때 일치하지 않은 값도 포함
💥 FULL OUTER JOIN 오라클 구문 사용 불가
SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
SELECT EMP_NAME, DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE = DEPT_ID(+);
지정한 컬럼 값이 일치하는 경우가 아닌 값의 범위에 포함되는 행들을 연결
SELECT EMP_NAME, E.SAL_LEVEL, SALARY, MIN_SAL, MAX_SAL
FROM EMPLOYEE E JOIN SAL_GRADE S ON (SALARY BETWEEN MIN_SAL AND MAX_SAL);
두 개 이상의 서로 다른 테이블을 연결하는 것이 아닌 같은 테이블을 조인하는 것
📍 ANSI
SELECT E1.EMP_ID, E1.EMP_NAME, NVL(E2.EMP_NAME, '없음') 직속상사
FROM EMPLOYEE E1 LEFT JOIN EMPLOYEE E2 ON (E1.MANAGER_ID = E2.EMP_ID);
📍 오라클
SELECT E1.EMP_ID, E1.EMP_NAME, NVL(E2.EMP_NAME, '없음') 직속상사
FROM EMPLOYEE E1, EMPLOYEE E2
WHERE E1.MANAGER_ID = E2.EMP_ID(+);
동일한 타입과 이름을 가진 컬럼이 있는 테이블 간의 조인을 간단하게 표현
반드시 두 테이블 간의 동일한 컬럼명, 타입을 가진 컬럼 필요
SELECT EMP_ID 사번, EMP_NAME 이름, JOB_CODE 직급코드, JOB_NAME 직급명 FROM EMPLOYEE
NATURAL JOIN JOB;
N개의 테이블을 조회할 때 사용 ⭐ 반드시 순서대로 작성 !
📍 ANSI
SELECT EMP_ID, EMP_NAME, JOB_NAME, DEPT_TITLE FROM EMPLOYEE
JOIN JOB USING (JOB_CODE)
JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
📍 오라클 ← AND 연산 이용
SELECT EMP_ID, EMP_NAME, JOB_NAME, DEPT_TITLE
FROM EMPLOYEE E, JOB J, DEPARTMENT
WHERE E.JOB_CODE = J.JOB_CODE
AND DEPT_CODE = DEPT_ID;