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
복사