본문 바로가기

SQL

SQL ) 조인 JOIN

조인(join)이란 두 개의 테이블을 묶어서 하나의 결과를 만들어 내는 것을 말합니다.

 

JOIN 종류

 

 

1. INNER JOIN

  • 설명: 두 테이블 간의 공통된 조건을 만족하는 행만 반환합니다.
  • 결과: 조건에 맞는 행만 결과에 포함되며, 어느 한쪽에만 존재하는 데이터는 제외됩니다.
  • 예시: SELECT * FROM 테이블1 INNER JOIN 테이블2 ON 테이블1.키 = 테이블2.키
SELECT a.column1, b.column2
FROM table1 a
INNER JOIN table2 b ON a.common_column = b.common_column;

2. LEFT (OUTER) JOIN

  • 설명: 왼쪽(첫 번째) 테이블의 모든 행을 반환하고, 오른쪽(두 번째) 테이블에 매칭되는 값이 없는 경우 NULL로 표시합니다.
  • 예시: SELECT * FROM 테이블1 LEFT JOIN 테이블2 ON 테이블1.키 = 테이블2.키
  • 결과: 왼쪽 테이블의 모든 행이 포함되며, 오른쪽 테이블에 매칭되지 않는 값은 NULL로 채워집니다.

3. RIGHT (OUTER) JOIN

  • 설명: 오른쪽(두 번째) 테이블의 모든 행을 반환하고, 왼쪽(첫 번째) 테이블에 매칭되는 값이 없는 경우 NULL로 표시합니다.
  • 예시: SELECT * FROM 테이블1 RIGHT JOIN 테이블2 ON 테이블1.키 = 테이블2.키
  • 결과: 오른쪽 테이블의 모든 행이 포함되며, 왼쪽 테이블에 매칭되지 않는 값은 NULL로 채워집니다.

4. FULL (OUTER) JOIN

  • 설명: 두 테이블의 모든 행을 반환하고, 어느 한쪽에 매칭되지 않는 값은 NULL로 표시합니다.
  • 예시: SELECT * FROM 테이블1 FULL JOIN 테이블2 ON 테이블1.키 = 테이블2.키
  • 결과: 두 테이블의 데이터를 모두 가져오며, 매칭되지 않는 값은 NULL로 표시됩니다.

5. CROSS JOIN

  • 설명: 두 테이블의 행을 모두 조합하여 가능한 모든 경우의 수를 반환합니다. (카티션 곱)
  • 예시: SELECT * FROM 테이블1 CROSS JOIN 테이블2
  • 결과: 각 테이블의 모든 행이 서로 결합되어 결과 행의 개수가 두 테이블의 행 개수의 곱이 됩니다.

6. SELF JOIN

  • 설명: 같은 테이블을 스스로 조인하여, 테이블 내의 다른 행과 데이터를 비교할 때 사용합니다.
  • 예시: SELECT A.*, B.* FROM 테이블 A, 테이블 B WHERE A.키 = B.키
  • 결과: 동일한 테이블에서 특정 조건을 기준으로 행을 서로 결합하여 필요한 데이터만을 추출합니다.

7. NATURAL JOIN

  • 설명: 두 테이블에서 공통적으로 존재하는 모든 열(column)을 기준으로 자동으로 JOIN하는 방식입니다. ON 조건을 명시할 필요가 없습니다.
  • 예시: SELECT * FROM 테이블1 NATURAL JOIN 테이블2
  • 결과: 공통된 열을 기준으로 조인된 결과가 반환되며, 중복된 열은 하나로 나타납니다.

 

 

 

내부조인

두 테이블을 연결할 때 가장 많이 사용되는 것이 내부 조인입니다. 그냥 조인이라고 부르면 내부 조인을 의미합니다.

두 테이블의 조인을 위해서는 테이블이 일대다(one to many) 관계로 연결되어야 합니다.

일대다 관계란 두 개의 테이블이 서로의 행에 대해서 여러 개로 연관되어 있는 상태를 말합니다.

일대다 관계는 주로 기본 키(PK)와 외래 키(FK) 관계로 맺어져 있습니다. 그래서 일대다 관계를 'PK-FK 관계'라고 부르기도 합니다. 하지만 꼭 기본키-외래키 관계가 아니여도 가능한 조인도 있습니다. 상호 조인이 대표적입니다. 상호 조인 외의 조인은 기본키-외래키 관계가 핵심 요소입니다.

SELECT 열 목록
FROM 첫 번째 테이블명
	INNER JOIN 두 번째 테이블명
    ON 조인될 조건
WHERE 검색 조건

 

이때 INNER JOIN을 JOIN이라고만 써도 INNER JOIN으로 인식합니다.

 

 

두 개의 테이블을 조인하는 경우 동일한 열 이름이 존재한다면 꼭 '테이블이름.열이름' 형식으로 표기해야합니다.

각 열이 어느 테이블에 속한 것인지 명확하게 하려다 보면 코드가 길어져서 복잡해 보이기도합니다.

그럴 때는 간결하게 표현하기 위해서 FROM에 나오는 테이블의 이름 뒤에 별칭을 줄 수 있습니다.

SELECT M.mem_id, B.mem_name
FROM member M
	INNER JOIN buy B
    ON 조인될 조건
WHERE 검색 조건
반응형

'SQL' 카테고리의 다른 글

SQL ) protocol_enqueue_handshake_twice 오류  (0) 2024.10.17
SQL ) CASE문  (0) 2024.10.11
SQL ) 집계함수  (2) 2024.09.30
SQL ) 데이터베이스 키(KEY) 종류  (0) 2024.09.19
SQL ) 데이터 타입  (0) 2024.09.03