[데이터베이스] SQL - Join

kuku·2023년 3월 18일
0

CS 스터디

목록 보기
18/18

📖JOIN이란?

조인은 여러 개의 테이블을 연결하여 데이터를 검색하는 것을 말한다. 조인 속성은 조인 검색을 위해 테이블을 연결해주는 속성이다.

조인 속성에는 다음과 같은 특징이 있다.

  • 연결하려는 테이블 간에 조인 속성의 이름은 달라도 되지만 도메인은 같아야 함
  • 일반적으로 외래키를 조인 속성으로 이용함

또한, 조인 검색에서는 같은 이름의 속성이 서로 다른 테이블에 존재할 수 있기 때문에 속성 이름 앞에 해당 속성이 소속된 테이블의 이름을 표시한다. (ex. 주문.주문고객)

📁INNER JOIN

두 테이블을 연결할 때 가장 많이 사용하는 것이 INNER JOIN이다. 그냥 JOIN이라고 쓰면 INNER JOIN을 의미한다.

INNER JOIN은 두 테이블이 모두 가지고 있는 데이터만을 검색 결과로 한다. 마치 교집합과도 같다.

INNER JOIN에 대한 문법은 다음과 같다.

SELECT 테이블이름.조회할속성, 테이블이름.조회할속성
FROM 기준테이블
INNER JOIN 조인테이블 ON 기준테이블.조인속성 = 조인테이블.조인속성

또한, WHERE 절을 통해 INNER JOIN을 할 수도 있다.

SELECT 테이블이름.조회할속성, 테이블이름.조회할속성
FROM 기준테이블, 조인테이블
WHERE 기준테이블.조인속성 = 조인테이블.조인속성

📁LEFT OUTER JOIN

앞서 설명한 INNER JOIN은 두 테이블에 모두 데이터가 있어야만 결과가 나오지만, OUTER JOIN은 한쪽에만 데이터가 있어도 결과가 나온다.

LEFT OUTER JOIN은 다음과 같이 왼쪽 테이블을 기준으로 OUTER JOIN을 하는 것이다.

문법은 다음과 같다.

SELECT 테이블이름.조회할속성, 테이블이름.조회할속성
FROM 기준테이블
LEFT OUTER JOIN 조인테이블 ON 기준테이블.조인속성 = 조인테이블.조인속성

다음과 같이 오른쪽 테이블에도 있는 데이터는 제외하고싶을 경우, WHERE 절에 조건을 추가한다.

SELECT 테이블이름.조회할속성, 테이블이름.조회할속성
FROM 기준테이블
LEFT OUTER JOIN 조인테이블 ON 기준테이블.조인속성 = 조인테이블.조인속성
WHERE 조인테이블.조인속성 IS NULL

📁RIGHT OUTER JOIN

RIGHT OUTER JOIN은 다음과 같이 오른쪽 테이블을 기준으로 OUTER JOIN을 하는 것이다.

SELECT 테이블이름.조회할속성, 테이블이름.조회할속성
FROM 기준테이블
RIGHT OUTER JOIN 조인테이블 ON 기준테이블.조인속성 = 조인테이블.조인속성

마찬가지로 왼쪽 테이블에도 있는 데이터는 제외하고싶을 경우, WHERE 절에 조건을 추가한다.

SELECT 테이블이름.조회할속성, 테이블이름.조회할속성
FROM 기준테이블
LEFT OUTER JOIN 조인테이블 ON 기준테이블.조인속성 = 조인테이블.조인속성
WHERE 기준테이블.조인속성 IS NULL

📁FULL OUTER JOIN

FULL OUTER JOIN은 두 테이블이 가지고 있는 데이터를 모두 검색할 수 있다. 마치 합집합과 같다.

SELECT 테이블이름.조회할속성, 테이블이름.조회할속성
FROM 기준테이블
FULL OUTER JOIN 조인테이블 ON 기준테이블.조인속성 = 조인테이블.조인속성

두 테이블이 공통으로 가지고 있는 데이터를 제외하고싶을 경우, WHERE 절에 조건을 추가한다.

SELECT 테이블이름.조회할속성, 테이블이름.조회할속성
FROM 기준테이블
LEFT OUTER JOIN 조인테이블 ON 기준테이블.조인속성 = 조인테이블.조인속성
WHERE 기준테이블.조인속성 IS NULL OR 조인테이블.조인속성 IS NULL

📁CROSS JOIN

CROSS JOIN은 한 테이블의 모든 행과 다른 테이블의 모든 행을 조인한다. 그렇기 때문에 CROSS JOIN에 대한 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 것과 같다. CROSS JOIN을 카티션 곱(CARTESIAN PRODUCT)라고도 한다.

다음과 같이 왼쪽 테이블의 행이 3개, 오른쪽 테이블의 행이 4개이면 CROSS JOIN에 대한 결과는 총 12개의 행으로 이루어진다.

SELECT 테이블이름.조회할속성, 테이블이름.조회할속성
FROM 기준테이블
CROSS JOIN 조인테이블

CROSS JOIN할 테이블을 FROM 절에 단순 나열하는 방식으로도 작성할 수 있다.

SELECT 테이블이름.조회할속성, 테이블이름.조회할속성
FROM 기준테이블, 조인테이블

📁SELF JOIN

SELF JOIN에서는 한 테이블이 자기 자신과 조인한다. 따라서 하나의 테이블을 사용하고, 하나의 테이블을 여러 번 복사하여 조인한다고 생각하면 쉽다.

참고 : 데이터베이스 개론 (한빛아카데미), https://coding-factory.tistory.com/87, https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

0개의 댓글