2022. 3. 9. 21:43ㆍSQL
하나의 테이블에 조회하길 원하는 모든 데이터가 있는 경우는 드물다.
보통 회사 서버에 내가 원하는 정보는 여러 테이블에 나눠서 존재하기 때문에 테이블을 결합하여 조회할 필요성이 있다.
조인이란?
두 개 이상의 테이블에 있는 컬럼의 값을 테이블 간의 관계(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을 사용하는 경우 공통 컬럼이 중복으로 등장한다.
'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 |