
데이터는 테이블에 흩어져 저장되어 있으므로 사용자가 원하는 형태로 데이터를 조작하려면 특별한 방법이 필요함.
이를 위해 사용하는 기법이 -> 조인
조인은 한개 이상의 테이블과 테이블을 서로 연결하여 사용하는 기법을 말함.
조인 기법 종류
곱집합: 가능한 모든 행을 조인함
동등 조인: 조인 조건이 정확히 일치하는경우에 결과를 출력
비동등 조인: 조인 조건 이 정확히 일치하지않는경우에 결과를 출력
외부조인: 조인 조건이 정확히 일치하지않아도 모든 결과를 출력한다.
자체 조인: 자체 테이블엣 조인 하고자 할때 사용
조인 사용 규칙
동등 조인(equi join)이란 양쪽 테이블에서 조인 조건이 일치하는 행만 가져오는 가장 일반적이고 자주 쓰는 조인입니다.
등호(=) 연결 연산자를 사용하여 조건값이 정확하게 일치할때만 행을 가져오기때문에 equi-join 혹은 inner join이라고도 부릅니다. 기본키(PK) 와 외래 키(FK)관계를 이용하여 조인하기도 하고 키가 아니더라도 다양한 조건으로 조인 할수있다.
예제 6-1
select A.employee_id, B.department_id,B.department_name, C.location_id,C.city FROM hr.employees A , hr.departments B, hr.locations C
where A.department_id = B.department_id
And B.location_id = C.location_id

동등 조인은 데이터 값이 정확히 일치하는 경우에만 결과를 출력함 == 데이터 값이 일치하지 않는다면 결과가 조회 되지않는다.
외부 조인(outer join)은 조건을 만족하지 않는 행도 모두 출력하기위한 조인 기법입니다.
외부조인의 특징
예제 6-2
select A.employee_id, A.first_name, A.last_name, B.department_id, B.department_name
From hr.employees A, hr.departments B
where A.department_id= B.department_id(+)
order by A.employee_id

자기 자신의 테이블을 조인하는 것을 자체 조인(self join)이라고 함
자체 조인을 사용하려면 별칭을 사용해야 함.
예제 6-3
SELECT A.employee_id, A.first_name, A.last_name, A.manager_id,
B.first_name||' '||B.last_name manager_name
FROM hr.employees A, hr.employees B
WHERE A.manager_id = B.employee_id
ORDER BY A.employee_id;

조인기법 외에도 테이블에서 데이터를 조회하는 방식이 한가지 더있음-> 그것이 바로 집합연산자임.
집합 연산자는 SELECT문을 여러개 연결하여 작성하며, 각 SELECT문의 조회결과를 하나로 합치거나 분리할수있음
집합연산자는 합집합, 교집합, 차집합의 논리와 같음
UNION: SELECT문의 조회결과의 합집합. 중복되는 행은 한번만 출력함 | 합집합
UNION ALL: SELECT문의 조회결과의 합집합. 중복되는 행도 그대로 출력함 | 합집합
INTERSET: SELECT문의 조회결과의 교집합. 중복되는 행만 출력함 | 교집합
MINUS: 첫번째 SELECT문의 조회결과에서 두번째 조회 결과를 뺸다 | 차집합
SQL을 이용해 SELECT문의 실행 결과를 집합하나로 만들수있음.
즉, 각기 다른 두개이상의 SELECT문을 실행한 결과를 하나로 묶어서 출력할수있음.
=> UNION연산자는 집합을 하나로 묶을 때 사용하며, 중복행은 한번만 출력하는 합집합 연산자임.
예제 6-4
SELECT department_id
FROM HR.employees
UNION
SELECT department_id
FROM HR.departments;

UNION ALL연산자는 UNION 연산자와 동일한 기능을 함.
다만 UNION 연산자가 중복 행을 한번 만 출력하는데 반해 UNION ALL 연산자는 중복행과 상관없이 양쪽에서 조회된 결과를 모두 출력함.
예제 6-5
SELECT department_id
FROM HR.employees
UNION ALL
SELECT department_id
FROM HR.departments
ORDER BY department_id;

INTERSET 연산자는 양쪽 SELECT문의 결과에 존재하는 데이터만 출력함.
즉, 양쪽 SELECT 문 조회결과의 교집합을 출력함.
예제 6-6
SELECT department_id
FROM HR.employees
INTERSECT
SELECT department_id
FROM HR.departments
ORDER BY department_id;

MINUS 연산자는 첫번재 SELECT문의 집합에서 두번째 SELECT문의 집합을 뺀 결과를 출력함
첫번째 SELECT문의 집합에 대해 양쪽 테이블의 교집합을 뺀 결과를 출력하는것과 같음
예제 6-7
SELECT department_id
FROM HR.departments
MINUS
SELECT department_id
FROM HR.employees
