쿼카러버의 기술 블로그

[SQL - Join (2)] Join은 무엇이고 어떻게 분류하는가? 본문

[Database]/SQL

[SQL - Join (2)] Join은 무엇이고 어떻게 분류하는가?

quokkalover 2022. 4. 4. 20:24

현재 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,or CROSS )
  • 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문들을 예제와 함께 살펴볼 예정이다.

 

 

 

 

 

참고자료

https://launchschool.com/books/sql/read/joins

Comments