개요
데이터베이스를 관리할 때는 데이터베이스 품질 보장을 위해 정규화(관계형 스키마를 세분화하는 것)를 한다.
이렇게 세분화된 테이블들은 연결되어 사용해야 하는 경우가 있다.
예를 들어, 학생 정보 테이블과 학과 정보 테이블이 정규화에 의해 분리되었고 학생의 학과 정보를 위해 두 테이블을 연결하여 정보를 얻는다.
이러한 연결을 위한 연산이 JOIN이다.
JOIN 종류
- 카티션 곱(Cartesian Product): 모든 행에 대한 조인(합집합)
- 동등 조인(equi join): 공통 속성을 기준으로 같은 값을 가지는 행 조회(교집합)
- 비동등 조인(non-equi join): 공통 속성을 기준으로 >, <, >=, <= 연산자를 통한 조회
- 외부 조인(outer join): 조인 조건이 만족하지 않는 경우, 모두 조회 LEFT/RIGHT로 나뉜다.
- 자체 조인(self join): 자체 테이블에서 조인하여 조회
카티션 곱(Cartesian Product)
단순히 두 개 이상의 테이블에 대한 모든 행을 반환하는 쿼리문
select first_name, last_name
from customer, address
명시하기 위해 CROSS JOIN 을 사용하기도 한다.
select first_name, last_name
from customer cross join address
Equl JOIN
두 개 이상의 테이블에 대한 공통 부분을 반환하는 쿼리문으로, JOIN 연산에서 가장 자주 쓰인다.
where절 join (묵시적인 join 방법)
select address, district, city
from address, city
where address.city_id = city.city_id;
명시적인 join
select address, district, city
from address join city
on address.city_id = city.city_id;
- from 절에 두 개의 테이블에 대한 join을 명시
- on 절에 join 조건을 작성
별칭 붙이기
select address, district, city
from address a join city c
on a.city_id = c.city_id;
- as는 생략 가능
where랑 join 같이 사용하기
select address, district, city
from address as a inner join city as c
on a.city_id = c.city_id
where district = "Texas";
여러 개의 테이블 join
select *
from customer join addresss
on customer.address_id = address.address_id
join city
on address.city_id = city.city_id
먼저 customer 테이블과 address 테이블을 address_id가 같은 조건으로 조인하고, city 테이블에 city_id가 같은 조건으로 조인한 쿼리문으로, 테이블 3개를 조인한 결과가 도출된다.
Select의 cloumn 정의를 통해 원하는 결과만 출력
select f.title, fa.first_name, fa.last_name
from film f join film_actor fa
on f.film_id = fa.film_id
join actor a
on fa.actor_id = a.actor_id
flim 테이블의 영화 제목과 이 영화 제목의 주인공 역을 맡은 배우의 이름을 출력하는 쿼리문이다.
'DB > SQL' 카테고리의 다른 글
[DB] TRUNCATE, DELETE | RDBMS 삭제 명령어 비교 (1) | 2024.01.24 |
---|