오라클 조인과 ANSI의 차이점
SELECT A.직원ID, A.부서ID, B.부서명
FROM 직원 A, 부서 B
WHERE A.부서ID = B.부서ID (+) ;
WHERE 부분에 조인조건 사용
FROM 이 깔끔하지만 WHERE 가 복잡
아우터 조인은 (+) 기호를 이용해서 표시
LEFT JOIN 과 RIGHT JOIN 사이를 빠르게 전환 가능
SELECT A.직원ID, A.부서ID, B.부서명
FROM 직원 A LEFT OUTER JOIN 부서 B
ON (A.부서ID = B.부서ID)
FROM 뒤의 ON 부분에 조인조건을 사용
WHERE절 없이 구현 가능하지만 FROM절이 복잡
모든 DBMS에서 사용 가능
따로 (+) 조건이 없다면 INNER JOIN 으로 연결
양쪽 테이블 모두 OUTER JOIN을 하고 싶다면
FULL OUTER JOIN을 이용 (오라클 문법에는 존재X)
--ANSI 문법
SELECT A.직원ID, A.이름, B.주소
FROM 직원 A INNER JOIN 직원주소 B
ON (A.직원ID = B.직원ID);
SELECT A.직원ID, A.이름, B.주소
FROM 직원 A, 직원주소 B
WHERE A.직원ID = B.직원ID(+);
SELECT A.직원ID, A.이름, B.주소
FROM 직원 A LEFT OUTER JOIN 직원주소 B
ON (A.직원ID = B.직원ID);
--실습문제
SELECT A.직원ID, A.이름, B.주소
FROM 직원 A, 직원주소 B
WHERE A.직원ID = B.직원ID(+)
AND A.직원ID IN ('A0005', 'A0008');
SELECT A.직원ID, A.이름, B.주소
FROM 직원 A LEFT OUTER JOIN 직원주소 B
ON (A.직원ID = B.직원ID)
WHERE A.직원ID IN ('A0005', 'A0008');
SELECT B.직원ID, B.이름, A.주소
FROM 직원주소 A, 직원 B
WHERE A.직원ID(+) = B.직원ID;
SELECT B.직원ID, B.이름, A.주소
FROM 직원주소 A RIGHT OUTER JOIN 직원 B
ON (A.직원ID = B.직원ID);
SELECT A.직원ID, A.이름, A.나이, B.연락처
FROM 직원 A, 직원연락처 B
WHERE A.직원ID = B.직원ID;
SELECT A.직원ID, A.이름, A.나이, B.연락처
FROM 직원 A INNER JOIN 직원연락처 B
ON (A.직원ID = B.직원ID);
--TIP
SELECT A.직원ID, A.이름, A.나이, B.연락처, C.주소
FROM 직원 A , 직원연락처 B, 직원주소 C
WHERE A.직원ID = B.직원ID
AND B.직원ID = C.직원ID;
SELECT A.직원ID, A.이름, A.나이, B.연락처, C.주소
FROM 직원 A INNER JOIN 직원연락처 B
ON (A.직원ID = B.직원ID) INNER JOIN 직원주소 C
ON (B.직원ID = C.직원ID);
SELECT 소속반, COUNT(소속반)
FROM 수강생정보
GROUP BY 소속반;