[MySQL] 여러 테이블을 하나의 테이블로 조합하기
JOIN를 이용해 여러 테이블을 하나의 테이블 또는 결과 집합으로 표현하기
1. JOIN
JOIN
은 데이터베이스 내의 여러 테이블을 조합해 하나의 테이블 또는 결과 집합으로 표현해 준다. JOIN
의 기본 문법은 다음과 같다.
-- JOIN의 기본 문법
table1
JOIN table2
ON condition
관계형 데이터베이스에서 JOIN의 필요성
관계형 데이터베이스에는 관계있는 데이터가 여러 테이블로 나누어 저장되어있는데, JOIN
을 통해 각 테이블에 저장된 데이터를 효과적으로 검색할 수 있다.
cf. 관계형 데이터베이스(RDB)는 테이블, 행, 열의 정보를 구조화하는 방식으로 RDB에는 테이블을 조인하여 정보 간 관계 또는 링크를 설정할 수 있는 있는 기능이 있다.
조합 방식에 따른 JOIN 종류
(1) 교집합(INNER)
-- INNER JOIN 기본 문법
table1
INNER JOIN table2 ON table1.컬럼 = table2.컬럼
(2) 부분집합(LEFT/RIGHT)
-- LEFT JOIN 기본 문법
table1
LEFT JOIN table2 ON table1.컬럼 = table2.컬럼
-- RIGHT JOIN 기본 문법
table1
RIGHT JOIN table2 ON table1.컬럼 = table2.컬럼
(3) 합집합(OUTER)
Oracle에는 OUTER JOIN
연산이 있지만, MySQL은 지원하지 않는다. MySQL에서는 LEFT JOIN
한 결과와 RIGHT JOIN
한 결과를 UNION
으로 묶어주면 같은 결과를 출력할 수 있다.
-- 합집합을 위한 기본 문법
SELECT 특정 필드
FROM table1
LEFT JOIN table2 ON table1.필드 = table2.필드
UNION
SELECT 특정 필드
FROM table1
RIGHT JOIN table2 ON table1.필드 = table2.필드
LEFT JOIN
한 결과와 RIGHT JOIN
한 결과를 붙인다면 교집합이 한번 더 포함되는거 아닌가? 라는 생각이 들 수 있다. 하지만 UNION
은 중복된 행이 존재하면 중복을 제거한 결과를 보여주기 때문에 따로 교집합 부분의 데이터를 빼줄 필요가 없다.
cf. UNION 대신 UNION ALL을 사용하면 중복된 행을 하나의 값으로 대표하지 않고 같은 행이 여러 개 존재해도 중복제거 없이 다 출력한다.
2. Reference
👩🏻💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.
댓글남기기