10/17 22-1 JOIN
다중 JOIN
--3개 테이블 join 하기 전 확인
SELECT e.* ,department_name --컬럼이 적은 쪽은 * 로 하지 말고 필요한것만 가져옴
--last_name,salary, e.department_id,department_name, e.job_id,job_titlen 이건 2개만 했을 때 SELECT절
from employees e join departments d on e.department_id = d.department_id ; 요게 하나의 테이블이 된다고 생각하고 다중 JOIN을 시작하면 됨....
[3개 테이블 JOIN]
SELECT last_name,salary, e.department_id, department_name, e.job_id, job_title
from employees e join departments d on e.department_id = d.department_id
join jobs j on j.job_id= e.job_id;
[4개조인]
SELECT last_name,salary,e.department_id,department_name,e.job_id,job_title, l.location_id , city
from employees e join departments d on e.department_id = d.department_id
join jobs j on j.job_id= e.job_id
join locations l on l.location_id = d.location_id;
[5개]
SELECT last_name,salary,e.department_id,department_name,e.job_id,job_title,l.location_id,city,c.country_id,COUNTRY_NAME
from employees e join departments d on e.department_id = d.department_id
join jobs j on j.job_id= e.job_id
join locations l on l.location_id = d.location_id
join countries c on c.country_id = l.country_id ;
JOIN문을 계속 늘리다보면 꼬리에 꼬리를 무는 기차같은 느낌
[오라클식 표현]
SELECT 컬럼명…..
From 테이블명1 ,테이블명2
WHERE 테이블명1.PK컬럼명 = 테이블명2.FK컬럼명
다중JOIN
SELECT 컬럼명…..
From 테이블명1 ,테이블명2,테이블명3
WHERE 테이블명1.PK컬럼명 = 테이블명2.FK컬럼명 AND 테이블명2.PK컬럼명 = 테이블명3.FK컬러명
OUTER JOIN
INNER JOIN과는 달리 두 테이블에 조인 조건이 정확히 일치 하지 않더라도
어느 한쪽 테이블에서 결과값을 모두 가져오는 JOIN문이다.
OUTER JOIN문을 사용할때는 반드시 OUTER 전에 데이터를 어느 쪽 테이블에서 가져올지 즉 왼쪽인지(LEFT) 오른쪽인지(RIGHT) 아니면 양쪽 테이블(FULL)인지 반드시 기술해야 한다. 결과값을 모두 가져오기 때문에 어디서 가져오느냐에 따라 NULL이 들어갈 수도 안들어 갈 수도 있다!
자식테이블 기준으로 OUTER JOIN 하면 INNER조인과 같은 효과.. 이럴거면 INNER를 쓰지
1.LEFT OUTER JOIN JOIN 문 왼쪽에 있는 테이블에서 데이터를 모두 가져온다
SELECT 컬럼명
FROM 왼쪽테이블명 LEFT OUTER JOIN 오른쪽테이블명 ON 조인조건

2.RIGHT OUTER JOIN
JOIN 문 오른쪽에 있는 테이블에서 데이터를 모두 가져온다
SELECT 컬럼명
FROM 왼쪽테이블명 RIGHT OUTER JOIN 오른쪽테이블명 ON 조인조건

보면 오른쪽 테이블이 자식 테이블임 자식테이블 기준으로 부모테이블과 JOIN 한 것은 INNER JOIN과 동일하다..
3. FULL OUTER JOIN
JOIN문 양쪽에 있는 모든 데이터를 가지고 온다!
부모기준으로 한 JOIN 과 같지만 SELCT절에 이름을 어떤걸 가져오느냐에 따라서 값은 달라질 수 있음!!

잘 사용은 안되지만 저 NULL값을 이용해서 부서충원이 안된 부서를 찾는다던가 누락이 된 데이터를 찾는데에 이용 할 수있다!
부모기준으로 데이터를 몽땅 가져왔으니까 자식테이블에는 없는 값이 있을 수 있음
근데 그걸 어떻게 걸러내느냐
모든 테이블에는 PK값이 없을 수 없는데 OUTTER JOIN 하고나면 자식에겐 없는 부모값이 NULL 로 반환되서 나오니 그걸로 걸러네는 방법임!! 밑에 예제를 보면 아주 쉽게 이해 됨!!


4.SELF JOIN
자기 자신테이블 안에서도 JOIN 이 가능함...

EMP 테이블을 보면 EMPNO 나 MGR 나 모두 사원 번호 인 것을 알 수 있음!
관계만 있으면 JOIN 이 가능해 지는거....
대신 EMPNO 는 중복도 없고 기준이 되는 열이니PK 즉 부모가 되고 MGR은 중복도 NULL 값이 있는 것으로 보아 FK 즉 자식이 되는 셈임
