Notice
Recent Posts
Recent Comments
Link
관리 메뉴

데브마우스

[SQL] 조인 정리: 내부 조인, 외부 조인, 상호 조인, 자체 조인 본문

데이터베이스/SQL: 정리

[SQL] 조인 정리: 내부 조인, 외부 조인, 상호 조인, 자체 조인

데브마우스 2024. 1. 3. 12:54

조인이란 무엇인가요?

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

 

내부 조인이란 무엇인가요?

두 테이블 연결 시 가장 많이 사용됩니다. 일반적으로 조인이라하면 내부 조인을 의미합니다.

또한 조인을 위해서는 테이블이 일대다(One to Many) 관계로 연결되어야 합니다. 일대다에서 일(一)기본 키(Primary Key, PK)를 의미하며 다(多)외래 키(Foreign Key, FK)를 의미합니다. 그러므로 일대다 관계에서 한쪽 테이블에는 하나의 값만 있으며 다른 테이블에는 여러 개의 값이 존재할 수 있는 관계를 의미합니다.

내부 조인은 양(兩) 테이블 모두 있는 내용만 조인이 되는 방법입니다. 만약 양쪽 중에 한곳이라도 내용이 있을 때 조인을 하려면 외부 조인을 사용하셔야 합니다.

내부 조인을 어떻게 사용하나요?

내부 조인의 문법은 아래와 같습니다.

SELECT <열 목록>
FROM <첫 번째 테이블>
	[INNER] JOIN <두 번째 테이블> --INNER JOIN 대신 JOIN만 작성해도 INNER JOIN으로 인식합니다.
    ON <조인될 조건>
[WHERE 검색 조건]

일단 [INNER]과 ON을 생략하고 봐야합니다. 그뒤 필요한 [INNER] JOIN <두 번째 테이블]과 ON <조인될 조건>을 검색합니다.

내부 조인은 어떻게 작동하나요?

  1. 첫번째 테이블을 추출합니다. 이때 WHERE 조건절이 있을 경우 찾고자 하는 PK를 추출합니다.
  2. 이전 단계에서 추출한 PK를 두 번째 테이블의 ON <조인될 조건> 에서 검색합니다.
  3. PK를 찾으면 첫 번째 테이블과 두 번째 테이블의 두 행을 조인(Join)합니다.

내부 조인 사용 시 주의해야할 점이 있나요?

  • 내부 조인 사용 시 컬럼 이름이 중복될 경우 앞에 별칭(ALIAS)를 붙여줘야 합니다.
  • 내부 조인 사용 중 컬럼 이름이 중복되지 않고 다를 경우 컬럼 이름을 그대로 작성할 수 있습니다. 그러나 협업 시 조인인걸 더 명확하게 알 수 있도록 테이블 이름이나 별칭을 컬럼 앞에 붙여서 작성하시는걸 추천합니다.(예시: product.id, member.mem_name)

외부 조인이란 무엇인가요?

외부 조인(Outer Join)은 내부조인과 달리 한 쪽에만 데이터가 있어도 조인을 할 수 있습니다.

외부 조인의 코드 형식은 아래와 같습니다.

SELECT <열 목록>
FROM <첫 번째 테이블 (LEFT 테이블)>
	<LEFT | RIGHT | FULL> OUTER JOIN < 두 번째 테이블(RIGHT 테이블) >
	ON <조인될 조건>
[WHERE 검색 조건];

 

LEFT OUTER JOIN문의 의미는, '왼쪽 테이블의 내용은 모두 출력되어야 한다'로 해석하시면 됩니다.

RIGHT OUTER JOIN에서 LEFT OUTER JOIN과 동일한 결과를 출력 하기 위해서, 첫 번째 테이블과 두 번째 테이블의 위치를 변경하시면 됩니다.

FULL OUTER JOIN은 LEFT OUTER JOIN과 RIGHT OUTER JOIN이 합쳐진 것입니다.


상호 조인이란 무엇인가요?

상호 조인(Cross Join)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능을 말합니다.

그렇게 하면 데이터가 늘어나게 되며 테스트 용도로 대용량의 데이터를 생성할 때 사용합니다.

상호 조인의 코드 형식은 아래와 같습니다.

SELECT *
	FROM <첫 번째 테이블>
    CROSS JOIN <두 번째 테이블>;

자체 조인이란 무엇인가요?

자체 조인(Self Join)은 테이블이 자신과 조인 하는 것을 의미합니다.

자체 조인의 코드 형식은 아래와 같습니다.

SELECT <열 목록>
FROM <테이블_이름> 별칭A
	INNER JOIN <테이블> 별칭B
    ON <조인될 조건>
[WHERE 검색 조건]