🥞 BE
home

JOIN

JOIN 사용시 주의사항

별칭 사용: 테이블 별칭을 사용하여 가독성을 높이고 실수를 줄일 수 있다.
NULL 처리: OUTER JOIN을 사용할 때, NULL 값을 적절히 처리해야 한다.

1. INNER JOIN

조건

기준 테이블과 조인 테이블 모두에 공통된 컬럼 데이터가 존재해야 한다.

반환

일치하는 값: 결과 집합에 포함될 행은 공통 열의 값이 일치해야 한다.

사용 상황

두 테이블 간에 정확히 일치하는 데이터를 찾고자 할 때
SELECT students.name, courses.course_name FROM students INNER JOIN courses ON students.course_id = courses.id;
SQL
복사

2. LEFT JOIN (LEFT OUTER JOIN)

조건

기준 테이블과 조인 테이블 모두에 공통된 컬럼 데이터가 존재해야 한다.

반환

왼쪽 테이블의 모든 행: 오른쪽 테이블에 일치하는 값이 없어도 왼쪽 테이블의 모든 행을 반환한다.

사용 상황

왼쪽 테이블의 모든 데이터를 포함하고, 오른쪽 테이블의 일치하는 데이터가 있는 경우 해당 데이터를 포함하고자 할 때.
SELECT students.name, courses.course_name FROM students LEFT JOIN courses ON students.course_id = courses.id;
SQL
복사

3. RIGHT JOIN (RIGHT OUTER JOIN)

조건

기준 테이블과 조인 테이블 모두에 공통된 컬럼 데이터가 존재해야 한다.

반환

오른쪽 테이블의 모든 행: 왼쪽 테이블에 일치하는 값이 없어도 오른쪽 테이블의 모든 행을 반환한다.

사용 상황

오른쪽 테이블의 모든 데이터를 포함하고, 왼쪽 테이블의 일치하는 데이터가 있는 경우 해당 데이터를 포함하고자 할 때.
SELECT students.name, courses.course_name FROM students RIGHT JOIN courses ON students.course_id = courses.id;
SQL
복사

4. FULL JOIN (FULL OUTER JOIN)

조건

기준 테이블과 조인 테이블 모두에 공통된 컬럼 데이터가 존재해야 한다.

반환

모든 행: 두 테이블의 모든 행을 반환하며, 일치하지 않는 경우에는 NULL로 표시한다.

사용 상황

두 테이블의 모든 데이터를 결합하여, 일치하는 데이터와 일치하지 않는 데이터를
모두 포함하고자 할 때.
SELECT students.name, courses.course_name FROM students FULL JOIN courses ON students.course_id = courses.id;
SQL
복사
MySQL에서는 FULL JOIN을 직접 지원하지 않으므로 UNION을 사용하여 구현해야 한다!

5. CROSS JOIN

조건

조건 없음

반환

두 테이블 간의 모든 가능한 행 조합을 반환한다.

사용 상황

두 테이블의 모든 행 조합을 생성하고자 할 때.
SELECT students.name, courses.course_name FROM students CROSS JOIN courses;
SQL
복사

6. SELF JOIN

조건

자체 조인: 같은 테이블을 두 번 조인하여 사용한다.

반환

ALIAS 사용: 같은 테이블을 두 번 참조하므로, 별칭을 사용하여 구분한다.

사용 상황

테이블 내에서 데이터를 비교하거나 계층 구조를 표현하고자 할 때.
SELECT a.employee_name AS Employee, b.employee_name AS Manager FROM employees a INNER JOIN employees b ON a.manager_id = b.employee_id;
SQL
복사

7. NATURAL JOIN

조건

기준 테이블과 조인 테이블 모두에 공통된 컬럼 데이터가 존재해야 한다.
자동 매칭: 동일한 이름을 가진 모든 열을 사용하여 조인한다.

반환

동일한 이름을 가진 컬럼으로 구성된 테이블

사용 상황

동일한 이름을 가진 공통 열을 기준으로 자동으로 조인하고자 할 때.
SELECT * FROM employees NATURAL JOIN departments;
SQL
복사