꾸물꾸물 졔의 개발공부

[DB] JOIN문, JOIN의 종류 : INNER, OUTER, CROSS, SELF 본문

CS

[DB] JOIN문, JOIN의 종류 : INNER, OUTER, CROSS, SELF

체제 2023. 4. 29. 13:25

JOIN 이란?

두개 이상의 테이블을 서로 연결하여 데이터를 검색하는 방법. 

 

하나의 테이블에 원하는 데이터가 모두 있다면 좋겠지만, 두 개의 테이블에 데이터가 나뉘어져 있어 테이블을 엮어야하는 경우도 많다. 조인을 사용하면 두개의 테이블을 엮어서 마치 하나의 테이블인 것처럼 보여주고, 그 중 원하는 결과를 얻을 수 있다. 

 

두 테이블의 조인을 위해서는 기본키와 외래키 관계로 맺어야 하고, 이를 일대 다 관계라고 한다. 조인의 종류에는 INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN 이 있다. 

 

🔎JOIN 의 종류 

  • INNER JOIN(내부 조인) : 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.
  • OUTER JOIN(외부 조인) : 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나온다.
  • CROSS JOIN(상호 조인) : 한쪽 테이블의 모든 행과 다른쪽 테이블의 모든 행을 조인한다.
  • SELF JOIN(자체 조인) : 자신과 조인한다는 의미로, 1개의 테이블을 사용한다. 

 


1. INNER JOIN (내부 조인) 

두 테이블의 교집합, 즉 두 테이블의 조인 조건을 모두 만족하는 행을 반환한다. 기준 테이블과 조인 테이블 모두에 조인 컬럼 데이터가 존재해야 조회됨.

두 테이블을 연결할 때 가장 많이 사용하는 것이 내부 조인이다. 그냥 조인이라고 표시하면 내부 조인을 의미한다. 

 

1) 명시적 조인 표현 

테이블의 조인을 지정하기 위해 JOIN 키워드를 사용하고 ON 키워드를 사용해 조인 조건을 표시한다. 

INNER JOIN은 JOIN 이라고만 써도 INNER JOIN으로 인식한다. 

SELECT 조회 컬럼 
FROM 테이블1 (INNER) JOIN 테이블2
ON 테이블1.컬럼 = 테이블2.컬럼
[WHERE 추가 검색조건]

 

2) 암시적 조인 표현 

SELECT 구문의 FROM 절에서 콤마(,) 를 사용하여 단순히 조인을 위한 여러 테이블을 나열한다. 

SELECT 조회할 컬럼
FROM 테이블1, 테이블2
[WHERE 조건문]

 

2. OUTER JOIN (외부 조인)

 내부 조인은 두 테이블에 모두 데이터가 있어야 결과가 조회되지만, 외부 조인은 한쪽에만 데이터가 있어도 결과가 조회된다. 즉, 조인 조건에 동일한 값이 없는 행도 반환되어진다. 

SELECT 조회할 컬럼
FROM 테이블1(LEFT 테이블) <LEFT | RIGHT | FULL> OUTER JOIN 테이블2(RIGHT 테이블) 
ON 테이블1.컬럼 = 테이블2.컬럼
[WHERE 검색 조건]

 

OUTER JOIN 의 종류 

  • LEFT OUTER JOIN : 왼쪽 테이블의 모든 값이 출력되는 조인 
  • RIGHT OUTER JOIN : 오른쪽 테이블의 모든 값이 출력되는 조인 
  • FULL OUTER JOIN : 왼쪽 또는 오른쪽 테이블의 모든 값이 출력되는 조인 
  • 매칭되는 테이블에 매칭되는 데이터가 없는 경우 NULL로 표시된다. 

 

WHERE 조건절에 NULL을 표시하여 기준테이블에는 있지만, 매칭된 테이블에는 없는 데이터를 찾아낼 수 있다. 

 

 

3. CROSS JOIN (상호 조인)

한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능이다. 즉, 곱집합을 반환한다. 그렇기에 상호 조인시 전체 결과의 행 갯수는 두 테이블의 행의 갯수를 곱한 수만큼 된다. 카티션 곱(CARTESIAN PRODUCT)이라고도 한다. 

SELECT 조회할 컬럼
FROM 테이블1 CROSS JOIN 테이블2

 

 

4. SELF JOIN (자체 조인)

자체조인은 자기자신과 자기자신을 조인하는 것으로, 하나의 테이블을 여러번 복사해서 조인한다고 생각하면 편하다. 1개의 테이블만을 사용하기 때문에 반드시 별칭을 지정해야 한다. 별도의 문법 없이 OUTER이던 INNER이던 같은 테이블 1개로 조인할 경우 자체 조인이 된다.

SELECT 조회할 컬럼
FROM 테이블 별칭1 <INNER | OUTER > JOIN 테이블 별칭2
[WHERE 검색 조건]

ex)
SELECT A.NAME, B.AGE 
FROM PERSON A JOIN PERSON B

'CS' 카테고리의 다른 글

[CS/JAVA] JVM이란?  (0) 2023.08.23
[CS] Blocking/Non-blocking , Sync/Async  (1) 2023.05.11
[DB] 트랜잭션(Transaction)이란? ACID, COMMIT, ROLLBACK  (0) 2023.05.09
[CS] Cache(캐시) 란?  (0) 2023.04.19
[DB] SQL vs NoSQL  (0) 2023.03.10