본문 바로가기

DataBase/DBMS

10. JOIN(조인) : SQL의 꽃1 (조인, ANSI조인)

JOIN 하는 이유 : 

-지금까지는 하나의 테이블 안에 있는 데이터를 가져왔었다.
-2개 이상의 테이블에서 데이터를 검색하기 위해서

 

ex) 'king'의 부서이름을 구하여라 
select employee_id, department_id from employees where last_name='King';
→ 부서번호까지 구했다 (부서번호를 이용해 departments 테이블에서 부서이름을 가져와야한다)
select department_id, department_name from departments
where department_id in (80,90);

JOIN 사용 방법 TIP (순서)

1. 내가 원하는 데이터가 무엇인지??(컬럼 목록 정의) (처음에 어느 테이블에 있는지 신경쓰지 말고)

2. 원하는 데이터가 어느 테이블에 있는가??

3. 여러 테이블이 있다면 각각의 테이블의 공통 컬럼을 찾는다 (공통컬럼을 가지고 있어야 한다)

 


표현방법 2가지 (조인, ANSI조인)

(정답은 없고 쓰고 싶은 join 쓰면 된다)

 

1. 조인 (FROM 테이블1, 2, 3 ...) 조인할 테이블 쓰고 WHERE 조건절로 조절

SELECT e.employee_id, e.department_id, d.department_name
  from employees e, departments d
  where e.department_id=d.department_id
  And e.last_name='King';
등가 조인 (department_id가 같은 조건인 하에서만 뽑겠다)

2. ANSI 조인 (FROM  테이블1 조인종류(INNER JOIN, OUTER JOIN 등) 테이블2) 하고 조건 ON절로 사용

→ where 절이 짧아지는 특성이 있다 

-3개이상 조인 할 때 (2개 조인한 후)

:from 테이블1 join 테이블 2

on 공통컬럼1=공통컬럼1

join 테이블3

on 공통컬럼2=공통컬럼2

WHERE 조건절

 


조인 종류

1. INNER 조인 (그냥 쓰면 된다)

 

2. SELF 조인 (같은 테이블 2개 사용 ALIAS 다르게 지정하여 사용) 

 

3.OUTER 조인 : (inner join할 때, 공통컬럼을 가진 값만 가져올 수 있다),

공통 컬럼을 값을 가지고 있지 않은 애가 있을 수 있다 전체 row의 데이터를 가져오고 싶을때

ex) 부서번호를 가지고 있지 않은 사원 (신입사원 아직 부서 배정을 못 받았다)

inner join을 이용하면 나오지않는다 (누락되는 데이터)

기존의 테이블의 row의 갯수를 확인한 후에 So, 외부조인 이용

-그냥 방법

등호로 따졌을 때 더 많은 쪽에 (+)가 있다고 생각

-ANSI 조인이용

LEFT JOIN : 왼쪽 테이블값이 누락된거 포함시키기 (왼쪽 테이블의 ROW가 크다고 생각 > )

RIGHT JOIN : 오른쪽 테이블값이 누락된거 포함시키기 (오른쪽 테이블의 ROW가 크다고 생각 <)

FULL JOIN : 양쪽 다 누락된 값 포함시켜서 나오도록