Kong Eunho

3.7 조인

2025년 08월 06일 18시
카테고리 - TIL, sqld, 3_SQL_기본


3.7.1 조인의 개념

조인(JOIN) : 두 개의 테이블을 하나로 병합하는 것. 여러 테이블에 저장된 데이터를 하나의 기준으로 한 번에 조회하는 경우, 데이터베이스가 수행하는 테이블 병합 연산을 조인이라 한다. 주로 테이블 간 PF와 FK의 연관성에 의해 성립하며, 논리적인 값들의 연관만으로도 성립할 수 있다. O(N^2)의 시간복잡도를 가진다.

3개 이상 테이블의 조인 : 조회 조건이 복잡하거나 대상이 되는 데이터가 3개 이상의 테이블에 나누어져 있을 경우에 3개 이상의 테이블에 대한 조인이 필요하다. N개의 테이블에 대해서 N-1개의 조인이 발생하며, 이 경우 조인의 연산량이 기하급수적으로 증가하면서 성능이 매우 하락할 수 있다는 점에 주의해야 한다.

3.7.2 표준 조인

ANSI SQL : DBMS별로 조금씩 문법이 달라서 발생하는 문제점을 줄이기 위해 만든 표준 문법.

표준 조인 : ANSI SQL 문법에 따른 조인 쿼리. 기준 조건으로 WHERE절이 아니라 ON절을 사용하며, FROM절에 조인의 종류를 명시한다.

FROM 테이블1 조인 테이블2 ON 조건식1
조인 : 조인의 종류(INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN, NATURAL JOIN, CROSS JOIN)를 지정한다.
조건식1 : 조인을 수행할 기준 키를 사용해서 조인 조건을 명시한다.

3.7.3 ~ 3.7.6은 각 조인에 대해 설명한다. 3.7.5까지는 아래의 예시 테이블을 사용한다.

학생 테이블
학번 이름 성별 평점
2401 공은호 4.42
2303 김철수 2.71
2511 이영희 3.56
학과 테이블
학번 학과 평점
2401 소프트웨어학과 4.42
2511 해고방지학과 3.89
1907 소프트웨어학과 1.95


3.7.3 INNER JOIN

조인을 수행할 때, 조인의 기준이 되는 키에 따라 어느 한쪽의 테이블에는 그에 맞는 칼럼값이 없는 경우가 있다. 이때 해당 칼럼값은 NULL이 되거나, 정해진 기본값이 된다. 이런 경우를 허용하는 것이 합집합의 개념이며, 허용하지 않는 것이 교집합의 개념이다.

INNER JOIN : 조인 조건에 맞는 행들만 병합하는 조인. 일종의 교집합 개념.

① EQUI JOIN : WHERE절에서 등식을 조건으로 사용할 때 발생하는 조인. 칼럼값이 정확하게 일치할 때 성립한다.

② Non EQUI JOIN : WHERE절에서 부등식을 조건으로 사용할 때 발생하는 조인. 칼럼값이 일치하는 경우 외에는 모두 Non EQUI JOIN이다.

SELECT T1.학번 학번1, T2.학번 학번2, T2.학과, T1.이름, T1.성별
FROM 학생 T1 INNER JOIN 학과 T2 ON T1.학번 = T2.학번;

각 테이블의 학번을 기준키로 하여 같은(EQUI) 값을 갖는 행만 출력한다.

실행결과
학번1 학번2 학과 이름 성별
2401 2401 소프트웨어학과 공은호
2511 2511 해고방지학과 이영희


3.7.4 OUTER JOIN

OUTER JOIN : 조인 조건에 맞지 않는 행까지 포괄적으로 병합하는 조인. 일종의 합집합 개념. 칼럼값이 존재하지 않더라도 모든 튜플을 병합한다. 조인의 대상이 되는 두 테이블을 각각 LEFT, RIGHT로 하여 3가지 방법으로 수행할 수 있다.

① LEFT OUTER JOIN : LEFT 테이블의 모든 행을 포함시키는 조인.

SELECT T1.학번 학번1, T2.학번 학번2, T2.학과, T1.이름, T1.성별
FROM 학생 T1 LEFT OUTER JOIN 학과 T2 ON T1.학번 = T2.학번;

각 테이블의 학번을 기준키로 하여 같은 값을 갖는 행을 포함한 학생 테이블의 모든 행을 출력한다.

실행결과
학번1 학번2 학과 이름 성별
2401 2401 소프트웨어학과 공은호
2303 [NULL] [NULL] 김철수
2511 2511 해고방지학과 이영희


② RIGHT OUTER JOIN : RIGHT 테이블의 모든 행을 포함시키는 조인.

SELECT T1.학번 학번1, T2.학번 학번2, T2.학과, T1.이름, T1.성별
FROM 학생 T1 RIGHT OUTER JOIN 학과 T2 ON T1.학번 = T2.학번;

각 테이블의 학번을 기준키로 하여 같은 값을 갖는 행을 포함한 학과 테이블의 모든 행을 출력한다.

실행결과
학번1 학번2 학과 이름 성별
2401 2401 소프트웨어학과 공은호
2511 2511 해고방지학과 이영희
[NULL] 1907 소프트웨어학과 [NULL] [NULL]


③ FULL OUTER JOIN : LEFT, RIGHT 테이블의 모든 행을 포함시키는 조인.

SELECT T1.학번 학번1, T2.학번 학번2, T2.학과, T1.이름, T1.성별
FROM 학생 T1 FULL OUTER JOIN 학과 T2 ON T1.학번 = T2.학번;

각 테이블의 학번을 기준키로 하여 같은 값을 갖는 행을 포함한 각 테이블의 모든 행을 출력한다.

실행결과
학번1 학번2 학과 이름 성별
2401 2401 소프트웨어학과 공은호
2511 2511 해고방지학과 이영희
[NULL] 1907 소프트웨어학과 [NULL] [NULL]
2303 [NULL] [NULL] 김철수


3.7.5 NATURAL JOIN

NATURAL JOIN : 같은 이름의 칼럼에 대해서 동일한 칼럼값을 가지는 행만 병합하는 조인. 조인 조건을 내포하고 있으므로 ON절을 사용할 수 없으며, 칼럼명에 테이블 별칭을 함께 표시할 수 없다.

SELECT * FROM 학생 NATURAL JOIN 학과;

각 테이블에서 이름이 동일한 칼럼(학번, 평점)의 값이 동일한 모든 행을 출력한다.

실행결과
학번 평점 이름 성별 학과
2401 4.42 공은호 소프트웨어학과


3.7.6 CROSS JOIN

CROSS JOIN : 각 테이블의 모든 행에 대한 대응을 조합하여 모든 경우의 수를 출력하는 조인. 이런 연산을 카테시안 곱이라 하며, 이 원리에 따라 결과는 ((LEFT 테이블의 행 갯수) * (RIGHT 테이블의 행 갯수)), M*N행이 된다. 조인 조건을 지정하지 않는다.

여기서는 위 예시의 학생 테이블과 아래의 학과 테이블을 사용한다.

학과 테이블
학과번호 학과
1001 소프트웨어학과
2003 해고방지학과


SELECT T1.이름, T2.학과
FROM 학생 T1 CROSS JOIN 학과 T2;

학생 테이블과 학과 테이블의 각 행을 조합한 모든 결과의 이름과 학과를 출력한다.

실행결과
이름 학과
공은호 소프트웨어학과
김철수 소프트웨어학과
이영희 소프트웨어학과
공은호 해고방지학과
김철수 해고방지학과
이영희 해고방지학과
◀ 이전 글 TIL, sqld, 3_SQL_기본
3.6 ORDER BY
2025-08-05
목록으로 다음 글 ▶ TIL, sqld, 3_SQL_기본
복합 쿼리 예제 - 1
2025-08-07