조인 JOIN

2022. 3. 9. 21:43SQL

하나의 테이블에 조회하길 원하는 모든 데이터가 있는 경우는 드물다.

보통 회사 서버에 내가 원하는 정보는 여러 테이블에 나눠서 존재하기 때문에 테이블을 결합하여 조회할 필요성이 있다.

 

조인이란?

두 개 이상의 테이블에 있는 컬럼의 값을 테이블 간의 관계(relationship)을 이용해서 가져오기 위해 사용하는 것이다.

 

조건식에 따른 분류

등가 조인 (Equal join)

두 개의 테이블 간에 일치하는 것을 조인한다. 교집합을 만드는 것

 

비등가 조인 (Non equal join)

두 개의 테이블 간에 조인하는 경우 = 조건을 사용하지 않고 >,<> 등의 비 등가 부호를 사용하는 조인이다.

 

CROSS JOIN

조건 없이 2개의 테이블을 하나로 조인하는 것이다.

카테시안 곱(Cartesian Product)이 발생한다.

두 테이블의 모든 조합을 만든다.

 

SELECT *

FROM <테이블1> CROSS JOIN <테이블2>;

 

SELECT *

FROM <테이블1>, <테이블2>;

 

# SELECT * 는 모든 행을 출력한다.

 

INNER JOIN : 등가조인

두 개 이상의 테이블에서 가져온 결과 중에 정확한 결과를 가져오기 위해서는 공통 부분을 이용한 조건문이 필요하다.

내부조인 (INNER JOIN)은 카테시안 곱으로 연산된 크로스 조인에서 조인 조건절이 만족된 경우의 행들만 남긴 조인이다. 

WHERE, ON, USING 사용

 

WHERE 절을 사용한 INNER JOIN

SELECT * 

FROM <테이블 A>, <테이블 B>

WHERE A.컬럼 = B.컬럼;

 

FROM 절에 조인 조건을 기술하는 방식

SELECT *

FROM <테이블 A> INNER JOIN <테이블 B>

ON A.컬럼 = B.컬럼

 

USING 절을 사용한 INNER JOIN

SELECT *

FROM <테이블 A> JOIN <테이블 B>

USING <컬럼명>

# USING 에 들어가는 인수는 컬럼 한 개 이므로 등가조인만 사용 가능하다.

 

JOIN 절을 사용한 INNER JOIN

SELECT *

FROM <테이블 A> JOIN <테이블 B>

ON A.컬럼 = B.컬럼;

# INNER JOIN에서 INNER를 생략할 수 있다.

 

# ON 과 USING 차이

ON : JOIN 조건 시 컬럼명이 다른 경우에도 사용 가능하다.

USING : JOIN 조건 시 컬럼명이 동일한 경우에 사용 가능하다.

INNER JOIN : 비등가조인

조인 조건에서 = 를 사용하지 않고 다른 조건을 사용하는 경우를 비등가 조인이라고 한다.

 

SELECT *

FROM <테이블 A> JOIN <테이블 B>

ON A.컬럼 BETWEEN B.컬럼1 AND B.컬럼2;

 

NATURAL JOIN 

두 테이블의 공통 컬럼을 이용해서 조인하는 것이다.

완전히 동일한 컬럼명을 가지고 있어야 하고 등가 조인에서만 사용 가능하다.

 

SELECT *

FROM <테이블 A> NATURAL JOIN <테이블 B>;

 

# USING, ON, WHERE 절로 조인 조건절을 서술할 필요가 없다.

# 공통 컬럼을 자동적으로 찾아서 조인한다.

# OUTER JOIN에서도 사용가능하다.

# 테이블 별칭을 사용 할 수 없다.

 

OUTER JOIN

선행 테이블(좌측 테이블) 또는 후행 테이블(우측 테이블)을 기준으로 조인 조건에 만족하지 않는 행들을 포함하여 출력한다.

LEFT OUTER JOIN

  좌측 테이블 행을 모두 포함하고 조인 조건에 만족하지 않는 우측 테이블 행은 NULL로 채워진다.

RIGHT OUTER JOIN

  우측 테이블 행을 모두 포함하고 조인 조건에 만족하지 않는 좌측 테이블 행은 NULL로 채워진다.

FULL OUTER JOIN

좌측, 우측 모든 테이블의 행을 포함하고 조인 조건에 만족하지 않는 각 테이블의 행은 NULL로 채워진다.

 

SELECT <출력 대상 컬럼들>

FROM <선행 테이블> LEFT OUTER JOIN

                             RIGHT OUTER JOIN

                             FULL OUTER JOIN <후행 테이블>

ON <조인 조건>;

 

# OUTER JOIN은 JOIN에 의해 제외된 행들을 포함시키기 위해서 사용한다.

 

# LEFT, RIGHT OUTER JOIN에서 ON 조인 조건식 말고 WHERE절로 조인 조건식 사용하여 표현 할 수 있는데

오른쪽 컬럼 뒤에 (+)를 붙이면 LEFT OUTER JOIN, 왼쪽 컬럼 뒤에 (+)를 붙이면 RIGHT OUTER JOIN이다.

  (+)는 데이터가 부족하여 NULL이 들어간다고 이해하자

 

세 개 이상의 테이블 조인

FROM <테이블 A>, <테이블 B>, <테이블 C>로 나열 되어 있을 때, 동시에 조인이 이루어지는 것이 아니라 A+B 이후 C와 조인이 이루어진다.

  N개의 테이블을 조인 할 때 N-1개 조건식이 필요하다.

 

ON vs WHERE 조건절

SELECT ~

FROM A JOIN B

ON <조인의 조건절>

WHERE <조건절>

 

SELECT ~

FROM A, B

WHERE <조인의 조건절> AND <조건절>

 

조인 조건과 비조인 조건을 구분하기 위해 ON을 사용

 

USING vs ON 조건절 

SELECT ~

FROM A JOIN B

ON A.컬럼 = B.컬럼

  A.컬럼명과 B.컬럼명이 달라도 상관 없다.

 

SELECT ~

FROM A JOIN B

USING 컬럼명

  A.컬럼명과 B.컬럼명이 동일해야 한다.

 

# SELECT * 쿼리문에서 USING 사용시 공통 컬럼이 가장 먼저 등장한다.

# ON을 사용하는 경우 공통 컬럼이 중복으로 등장한다.

728x90

'SQL' 카테고리의 다른 글

계층형 쿼리  (0) 2022.03.11
셀프 조인 Self Join  (1) 2022.03.10
윈도우 함수 WINDOW FUNCTION  (0) 2022.03.09
그룹 함수 GROUP FUNCTION  (1) 2022.03.09
HAVING  (0) 2022.03.08