다양한 SQL JOIN들에 대해 정리하고자한다.
LEFT JOIN은 왼쪽 테이블(LEFT JOIN 앞에 지정된 테이블)의 모든 레코드를 반환하고 오른쪽 테이블(LEFT JOIN 뒤에 지정된 테이블)에서 일치하는 레코드를 반환하고 일치하는 항목이 없으면 오른쪽 테이블의 열에 대해 NULL 값이 반환한다.
MYSQL에는 없기에 LEFT JOIN과 RIGHT JOIN을 이용해 구현할 수 있다.
SELECT customers.customer_id, customers.customer_name, orders.order_id, orders.order_date
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;
LEFT JOIN에 (IS NULL) 조건을 추가하여, 오른쪽 테이블에 일치하는 레코드가 없는 경우만 선택한다.
SELECT students.student_id, students.student_name, grades.grade_id, grades.subject, grades.score
FROM students
LEFT JOIN grades ON students.student_id = grades.student_id
WHERE grades.student_id IS NULL;
지정된 조인 조건을 기반으로 두 테이블에서 일치하는 값이 있는 행만 반환한하는데 즉, 다른 테이블에 일치 항목이 없는 두 테이블의 행을 제외한다.(NULL 제외)
SELECT students.student_id, students.student_name, grades.grade_id, grades.subject, grades.score
FROM students
INNER JOIN grades ON students.student_id = grades.student_id;
MySQL은 FULL OUTER JOIN 구문을 직접 지원하지 않습니다. 그러나 'UNION' 연산자와 함께 'LEFT JOIN'과 'RIGHT JOIN'의 조합을 사용하여 해당 함수를 구현할 수 있다.
두 테이블의 모든 행을 가져와서 결과로 보여주며, 일치하지 않는 부분은 NULL 값으로 채운다.
SELECT students.student_id, students.student_name, grades.grade_id, grades.subject, grades.score
FROM students
LEFT JOIN grades ON students.student_id = grades.student_id
UNION
SELECT students.student_id, students.student_name, grades.grade_id, grades.subject, grades.score
FROM students
RIGHT JOIN grades ON students.student_id = grades.student_id
WHERE students.student_id IS NULL;