[DB] JOIN

2024. 6. 22. 22:46BE/DB

1. JOIN

 

둘 이상의 테이블에서 데이터가 필요할 때 관련 있는 속성을 기준으로 복수의 테이블을 ‘관계’ 지어주는 연산.

 

그래서 관계형 데이터베이스의 꽃이라 부른다.

 

일반적으로 각 테이블의 PK 및 FK로 구성된 조인 조건을 포함하는 WHERE 절을 작성해야 한다.

 


가. JOIN의 종류

 

조인은 크게 일반적인 조인(혹은 내부 조인)과 외부 조인으로 나눌 수 있다.

 

  • INNER JOIN
  • OUTER JOIN
    • LEFT OUTER JOIN
    • RIGHT OUTER JOIN

 

 


2. INNER JOIN

 

두 테이블 모두에서 일치하는 값을 가진 행만 반환.

 

select e.employee_id, e.first_name, e.salary, d.department_name
from employees e inner join departments d
on e.department_id = d.department_id
where e.employee_id = 100;

생략하면 기본적으로 INNER JOIN이다.

 

select e.employee_id, e.first_name, e.salary, d.department_name, l.street_address
from employees e join departments d 
on e.department_id = d.department_id
join location l 
on d.location_id = l.location_id
where l.city = 'Seattle';

3개 이상의 테이블을 조인할 경우 JOIN ~ JOIN ~ ON ~ ON ~도 가능하지만, 조건을 명확하게 표시하기 위해서 JOIN ~ ON ~ JOIN ~ ON으로 작성하자.

 


가. USING

select e.employee_id, e.first_name, e.salary, d.department_name, l.street_address
from employees e 
join departments d 
using (department_id)
join location l 
using (location_id)
where l.city = 'Seattle';
  • USING (공통 column) : 같은 이름을 가진 컬럼들 중에서 원하는 컬럼에 대해서 INNER JOIN한다.

 

알고는 있자.

 


나. NATURAL JOIN

select d.department_id, d.department_name, l.city
from departments d natural join locations l
where d.department_id = 10;

따로 지정하지 않아도 동일한 타입과 이름을 가진 컬럼을 조인 조건으로 이용.

 

단, 테이블 간에 동일한 형식을 갖는 공통 컬럼이 반드시 하나만 존재해야 한다.

 

동일한 이름을 갖는 컬럼이 있지만 데이터 타입이 다르면 에러가 발생한다.

 

잘 사용하진? 모르겠지만 알고는 있자.

 


3. OUTER JOIN

 

일치하는 행과 두 테이블 간에 일치하지 않는 일부 행이 포함.

 

외부 조인은 기본적으로 일치하지 않는 행을 처리하는 방식에서 내부 조인과 다름.

 

외부 조인에는 3 가지 유형

  • Left outer join (왼쪽 외부 결합) : LEFT 테이블의 모든 행과 두 테이블 간에 일치하는 레코드를 반환
  • Right outer join (오른쪽 외부 결합) : RIGHT 테이블의 모든 행과 두 테이블간에 일치하는 레코드를 반환
  • Full outer join (전체 외부 결합) : Left Outer Join과 Right Outer Join의 결과를 결합

 

 

MySQL은 Full outer join을 지원하지 않는다.

 


4. SELF JOIN

 

-- 사원과 해당 사원의 매니저 정보를 출력
select e.employee_id, e.first_name, m.employee_id, m.first_name
from employees e inner join employees m
on e.manager_id = m.employee_id;

같은 테이블끼지 Join.

 


5. None-Equi JOIN

 

select e.employee_id, e.first_name, e.salary, s.grade
form employees e join salgrade s
where e.salary between s.losal and s.hisal;

테이블의 PK와 FK가 아닌 일반 column을 join 조건으로 사용.

 


'BE > DB' 카테고리의 다른 글

[DB] SubQuery  (0) 2024.06.23
[DB] VIEW  (0) 2024.06.22
[DB] INDEX  (1) 2024.04.15
[DB] Transaction  (1) 2024.04.14
[DB] SET Operator  (0) 2024.04.14