데이터베이스 - 조인(Join)
Join의 종류
Join이란?
한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 나타낸 것이다. 관계형 데이터베이스는 구조적 특징으로 정규화를 수행해 의미있는 데이터의 집합으로 테이블을 나누게 되고 각 테이블은 관계를 가진다. 여러 테이블로 나뉘어 저장되므로 각 테이블에 저장된 데이터를 효과적으로 검색하기위해 조인이 필요하다.
Join의 종류
기존의 db
내부 조인(INNER JOIN)
- 가장 흔한 결합 방식이며, 기본 조인 형식으로 간주된다.
- 2개의 테이블의 컬럼 값을 조합함으로써 새로운 테이블을 생성
- 명시적 조인 표현(explicit)과 암시적 조인 표현(implicit)이 있다.
- 명시적 조인 표현
<!-- 명시적으로 JOIN, ON 키워드 사용--> SELECT * FROM employee INNER JOIN department ON employee.DepartmentID = department.DepartmentID;
- 암시적 조인 표현
<!-- 단순히 FROM에서 컴마로 구분 --> SELECT * FROM employee, department WHERE employee.DepartmentID = department.DepartmentID;
결과
- a. 자연 조인(NATURAL JOIN)
- INNER JOIN의 한 유형으로 동일한 컬럼명을 가진 컬럼의 각 쌍에 대해 단 하나의 컬럼만 포함
- SQL
SELECT * FROM employee NATURAL JOIN department;
결과
- b. 교차 조인(CROSS JOIN)
- INNER JOIN의 한 유형으로 조인되는 두 테이블에서 곱집합을 반환한다.
- SQL
<!-- 명시적 조인 표현 --> SELECT * FROM employee CROSS JOIN department; <!-- 암시적 조인 표현 --> SELECT * FROM employee, department;
결과
외부조인(OUTER JOIN)
조인 대상 테이블에서 특정한 테이블의 데이터가 모두 필요한 상황에서 외부조인을 활용하여 효과적으로 결과 집합 생성 가능
- a.왼쪽 외부 조인(LEFT OUTER JOIN)
- 왼쪽 테이블의 모든 데이터를 포함하는 결과를 생성
- SQL
SELECT * FROM employee LEFT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;
결과
- b. 오른쪽 외부 조인(RIGHT OUTER JOIN)
- 오른쪽 테이블의 모든 데이터를 포함하는 결과를 생성
- SQL
SELECT * FROM employee RIGHT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;
결과
- c. 완전 외부 조인(FULL OUTER JOIN)
- 양쪽 테이블 모든 데이터 포함하는 결과 생성
- SQL
SELECT * FROM employee FULL OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;;
결과
조인 사용할 때 주의사항 및 고려사항
SQL을 어떻게 작성하냐에 따라 성능이 크게 차이나기 때문에 명확하게 정의해야 한다. 조인 조건을 명확하게 제공하지 않을 경우 의도치 않게 CROSS JOIN이 수행될 수 있다. 조건을 먼저 적용하여 관계를 맺을 집합을 최소화한 후, 조인을 맺으면 효율적이다.
INNER JOIN vs LEFT JOIN
그래서 INNER JOIN과 LEFT JOIN의 차이점은 뭘까? INNER JOIN은 겹치지 않는 행이 존재할 경우 결과에서 제외된다. LEFT JOIN은 왼쪽의 모든 행을 조회하고 조건과 맞지 않는 행은 NULL로 채워진다.
참고: https://github.com/WeareSoft/tech-interview
*틀린 부분이 있으면 언제든지 말씀해 주시면 공부해서 수정하겠습니다.