티스토리 뷰
JOIN
- SQL 조인은 두 개 이상의 테이블들을 공통필드를 이용하여 통합한다.
- 스타 스키마로 구성된 테이블들로 분산되어 있던 정보를 통합하는데 사용한다.
- JOIN의 결과로 양쪽의 필드를 모두 가진 새로운 테이블이 만들어진다.
- 조인 방식에 따른 차이점
- 어떤 레코드들이 선택되는가
- 어떤 필드들이 채워지는가
JOIN 종류
- INNER JOIN
양쪽 테이블에서 매치가 되는 레코드들만 리턴한다. 양쪽 테이블의 필드가 모두 채워진 상태로 리턴된다.
SELECT * FROM 테이블1 JOIN 테이블2 ON 테이블1.컬럼1 = 테이블2.컬럼2
- LEFT OUTER JOIN
왼쪽 테이블의 모든 레코드들을 리턴한다. 오른쪽 테이블의 필드는 왼쪽 레코드와 매칭되는 경우에만 채워진 상태로 리턴된다. 매칭이 되지 않는 값들은 NULL로 채워진다.
SELECT * FROM 테이블1 LEFT JOIN 테이블2 ON 테이블1.컬럼1 = 테이블2.컬럼2;
- RIGHT OUTER JOIN : 오른쪽 테이블의 모든 레코드들을 리턴한다. 왼쪽 테이블의 필드는 오른쪽 레코드와 매칭되는 경우에만 채워진 상태로 리턴된다. 매칭이 되지 않는 값들은 NULL로 채워진다.
- FULL OUTER JOIN : 왼쪽 테이블과 오른쪽 테이블의 모든 레코드들을 리턴한다. 매칭되는 경우에만 양쪽 테이블들의 모든 필드들이 채워진 상태로 리턴된다. UNION은 UNION ALL에서 중복된 값들을 제거한다.
SELECT * FROM 테이블1 LEFT JOIN 테이블2 ON 테이블1.컬럼1 = 테이블2.컬럼2 UNION -- 또는 UNION ALL SELECT * FROM 테이블1 RIGHT JOIN 테이블2 ON 테이블1.컬럼1 = 테이블2.컬럼2
- CROSS JOIN : 왼쪽 테이블과 오른쪽 테이블의 모든 레코드들의 조합을 리턴한다.
SELECT * FROM 테이블1 CROSS JOIN 테이블2;
- SELF JOIN : 동일한 테이블을 alias를 다르게 해서 자기 자신과 조인한다.
SELECT * FROM EMPLOYEE emp JOIN EMPLOYEE mgr on emp.mgr_id = mgr.id;
JOIN시 고려해야할 점
- 중복 레코드가 없고, Primary Key의 유일성이 보장되는 지를 체크한다.
- 조인하는 테이블들간의 관계를 명확하게 정의한다.
- 1 : 1
- 완전한 1 : 1 : session 과 session_channel
- 한쪽이 부분집합이 되는 1 : 1
- 1 : N, N : 1
- 포함관계를 잘 생각해서 중복문제가 발생하지 않도록 한다.
- N : M
- 1 : 1 또는 1 : N으로 바꾸는 것이 가능하다면 변환하여 조인하는 것이 덜 위험하다.
- 1 : 1
- 어느 테이블을 베이스로 잡을지(FROM에 사용할지) 결정해야 한다.
728x90
반응형
'프로그래머스 백엔드 1기 > Database' 카테고리의 다른 글
데이터베이스 (14) - View (0) | 2021.08.14 |
---|---|
데이터베이스 (13) - 트랜잭션 (0) | 2021.08.13 |
데이터베이스 (11) - INSERT문, UPDATE문, DELETE문 (0) | 2021.08.12 |
데이터베이스 (10) - SELECT문 (0) | 2021.08.12 |
데이터베이스 (9) - CREATE TABLE문, DROP TABLE문 (0) | 2021.08.12 |
댓글