[SQL - Join (2)] Join은 무엇이고 어떻게 분류하는가?
현재 SQL의 조인 시리즈를 작성하고 있다. Join시리즈의 목차를 참고하려면 이 글을 참고하길 바란다.
본 글은 SQL의 Join에는 어떤 종류가 있는지 다룬다.
Join을 구별하는 방법은 크게 아래 두가지가 있다.
JOIN 조건으로 사용되는 연산자에 따른 분류
- EQUI JOIN : 두 테이블 간의 컬럼 값들이 서로 일치하는 경우, JOIN조건으로 ‘=’ 연산자 사용
- 쉽게 말해서 = sign으로 comparison operator를 사용하는 경우
- Syntax: 아래 두가지 모두 EQUI JOIN이다.
SELECT column_list
FROM table1, table2....
WHERE table1.column_name =
table2.column_name;
or -----
SELECT *
FROM table1
JOIN table2
[ON (join_condition)]
- NON EQUI JOIN : 두 테이블 간의 값들이 서로 일치하지 않는 경우, JOIN조건으로 BETWEEN ~ AND 등의 범위 비교 연산자를 사용
FROM 절의 JOIN형태에 따른 분류
- INNER JOIN : JOIN 조건에서 값이 일치하는 행만 반환
- OUTER JOIN : JOIN 조건에서 한쪽 값이 없더라도 행을 반환
Inner / Outer Join과 Equi Join의 차이
참고로 위에서 두 분류로 나누었다해서 이들이 완전 구분되는 개념은 아니다.
Equi Join과 Inner Join의 차이는 join condition에 따라 달라지기 때문이다. Inner join은 =
, <>
, >
, <
와 같은 oeprator를 사용할 수 있는 반면 Equi join은 =
만 사용하는 경우를 의미한다.
따라서 equality operator만을 사용해 join query를 만들 경우 해당 쿼리는 equi join이 된다.
즉 Equi join 문장들의 제약점은 조인을 생성하려하는 두 개의 테이블의 두 개 컬럼에서 공통된 값이 없다면 테이블로부터 데이터를 반환하지 못한다는 것이다. 따라서 Outer join은 한쪽 값이 없더라도 행을 반환하기 때문에 equi join이 될 수 없다.
Join Syntax
기본적인 Join의 syntax는 아래와 같다.
SELECT table_nameN.column_name, ...
FROM table_name1
{join_type} JOIN table_name2
ON {join_condition};
...
- table_name1 : 조인을 수행할 첫번째 테이블 이름
- {join_type} : 조인의 종류 (outer, inner, etc)
- 어떤 종류의 조인을 수행할지 정하려면
JOIN
키워드 전의 {join_type}부분에 다음과 같은 키워드를 입력하면된다. (INNER
,LEFT
,RIGHT
,FULL
,orCROSS
)
- 어떤 종류의 조인을 수행할지 정하려면
- table_name2 : 조인을 수행할 두 번째 테이블 이름
- ON {join_condition}: 조인 조건
아래에 이어서 JOIN문을 덧붙여 더 Join을 수행할 수 있다.
예를 들어 아래와 같은 Join연산을 수행하면
SELECT colors.color, shapes.shape
FROM colors
JOIN shapes
ON colors.id = shapes.color_id;
join연산에서 colors테이블의 id
컬럼과 shapes의 color_id
컬럼값이 일치하는 row들을 리턴한다.
본 글에서는 간단하게 Join에 어떤 종류가 있는지 알아봤다.
이제는 SQL에 어떤 Join들이 있는지 살펴볼 차례다. 다음 글에서는 SQL의 다양한 Join문들을 예제와 함께 살펴볼 예정이다.
참고자료