INNER 조인 : 조건에 해당하는 튜플만 출력(교집합)
OUTER 조인 : 조인에 실패한 튜플도 출력
- (+) 기호가 있으면 OUTER JOIN
- (+) 기호는 오라클에서만 사용
- (+) 기호가 없으면 INNER JOIN
- (+) 기호가 붙은 쪽의 반대쪽 테이블을 기준
-- OUTER JOIN
SELECT *
FROM 직원 A, 부서 B
WHERE A.부서ID = B.부서ID(+);
-- 문제 1) 직원 테이블과 직원주소 테이블은 둘 다 직원ID 컬럼을 가지고 있습니다. 이 컬럼으로 동등(“=“) 조인을 하면 서로 연관이 있는 튜플만 출력이 됩니다.
아래와 같은 결과가 되도록 조인으로 출력을 해주세요.
[ 직원 테이블 : 직원ID , 성별 , 나이 ]
[ 직원주소 테이블 : 직원ID , 구분코드 , 주소 ]
SELECT A.직원ID AS 직원_직원ID, A.성별, A.나이, B.직원ID AS 주소_직원ID, B.구분코드, B.주소
FROM 직원 A, 직원주소 B
WHERE A.직원ID = B.직원ID;
-- 문제 2) 1번에서 작성한 쿼리 결과에서 추가로 일반 조건을 작성하려고 합니다. 직원ID 가 A0007 인 직원의 정보만 출력되도록 작성해주세요.
SELECT A.직원ID AS 직원_직원ID, A.성별, A.나이, B.직원ID AS 주소_직원ID, B.구분코드, B.주소
FROM 직원 A, 직원주소 B
WHERE A.직원ID = B.직원ID
AND A.직원ID='A0007';
-- 문제 3) 직원 테이블과 직원주소 테이블을 [직원ID] 컬럼으로 조인하려고 합니다. 이 때 직원주소 테이블에는 없는 직원들의 정보도 출력되도록 아우터조인으로 쿼리를 작성해주세요.
SELECT A.직원ID AS 직원_직원ID, A.이름, A.연봉, B.직원ID AS 주소_직원ID, B.구분코드, B.주소
FROM 직원 A, 직원주소 B
WHERE A.직원ID = B.직원ID(+);
-- 문제 4) 3번에서 작성한 쿼리에서 추가로 일반 조건을 입력하려고 합니다. 이번에는 주소정보가 없는 직원들만 출력되도록 쿼리를 작성해주세요.
SELECT A.직원ID AS 직원_직원ID, A.이름, A.연봉, B.직원ID AS 주소_직원ID, B.구분코드, B.주소
FROM 직원 A, 직원주소 B
WHERE A.직원ID = B.직원ID(+)
AND B.주소 IS NULL;
-- 문제 5)
-- 직원 테이블과 직원주소 테이블 , 직원연락처 테이블을 [직원ID] 컬럼으로 ‘=’ 조인하려고 합니다. INNER JOIN으로 위 세 개의 테이블을 조인해보세요.
SELECT A.직원ID, A.이름, A.나이, B.연락처, C.주소
FROM 직원 A, 직원연락처 B, 직원주소 C
WHERE A.직원ID=B.직원ID
AND B.직원ID=C.직원ID;
-- 문제 6) 직원ID 가 ‘A0001’ , ‘A0002’ , ‘A0003’ 인 직원에 대해 아래 정보를 출력해주세요
SELECT A.직원ID, A.이름, A.입사일시, B.연락처
FROM 직원 A, 직원연락처 B
WHERE A.직원ID IN ('A0001','A0002','A0003')
AND A.직원ID IN (‘A0001’, ‘A0002’, ‘A0003’)
AND B.구분코드 = ‘휴대폰‘ ;
-- 문제 7) 직원들의 정보를 출력하되, 소속된 부서ID 에 해당하는 부서명도 함께 출력해주세요. (힌트 : 두 테이블 모두 부서ID 컬럼이 있음)
SELECT A.직원ID, A.이름, A.부서ID, B.부서명
FROM 직원 A , 부서 B
WHERE A.부서ID = B.부서ID ;