티스토리 뷰
목차
Join
Join은 간단히 말하면 필요에 의한 두 개 이상의 테이블 간 결합이다.
여기서 필요란 당연하다면 당연하게도 사용자의 필요, 따라서 개발자의 필요를 가리킨다.
따라서 Join은 필요와 목표에 의한 새로운 테이블을 (임시로) 생성하며,
데이터를 손쉽게 조회할 수 있도록 도와준다.
계속해서 테이블의 결합방식에 따른 Join의 종류를 알아보자.
Inner Join
Inner Join은 교집합에 해당한다.
두 테이블의 공통된 요소만 가져와 테이블을 구성하기 때문이다.
우선 다이어그램을 보면 아래와 같이 생겼다.
계속해서 간단한 두 개의 테이블로 예를 들어보자.
각 테이블에서 서로 연관된 내용만 뽑아 테이블을 생성한 것을 확인할 수 있다.
계속에서 SQL 표현식을 살펴보면, 아래와 같은 두 가지 방식(명시적, 암시적)으로 지정하는 것을 알 수 있다.
SELECT * FROM
NAME INNER JOIN MAJOR
ON NAME.ID = MAJOR.ID
SELECT * FROM
NAME, MAJOR
WHERE NAME.ID = MAJOR.ID
추가로 위와 같이 equal 연산자(=)를 이용하는 조인을 동등 조인(EQUI JOIN)이라고 한다.
Outer Join
Outer Join은 조건에 맞지 않아도 특정 테이블의 모든 행을 전부 포함하는 테이블을 작성하는 방식이다.
Left Outer Join
Left Outer Join은 크게 두 종류로 나뉜다.
왼쪽 테이블의 내용을 전부 가져오되 공통 부분을 포함하는 테이블을 작성하는 방법과
공통부분을 제외하고 작성하는 방법. 이 방법은 차집합과 같다. 우선 테이블로 보면 아래와 같다.
계속해서 각각을 SQL 쿼리문으로 작성해 보자.
SELECT * FROM
NAME LEFT OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID
SELECT * FROM
NAME LEFT OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID
WHERE MAJOR.ID IS NULL
Right Outer Join
다음으로는 Right Outer Join이다.
Left Outer Join에서 방향만 뒤집혔을 뿐 별 다를 것은 없다.
SELECT * FROM
NAME RIGHT OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID
SELECT * FROM
NAME LEFT OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID
WHERE NAME.ID IS NULL
Full Outer Join
마지막으로 Full Outer Join이다. 합집합에 해당하는 이 조인은 조건과 상관없이
대상 테이블의 모든 데이터를 가져와 테이블을 만든다.
SELECT * FROM
NAME FULL OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID;
SELECT * FROM
NAME FULL OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID
WHERE NAME.ID IS NULL OR MAJOR.ID IS NULL
MySQL의 경우는 Full Outer Join을 지원하지 않기 때문에 아래와 같이 두 조인을 섞어서 쓴다고 한다.
SELECT * FROM
NAME LEFT OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID
UNION
SELECT * FROM
NAME RIGHT OUTER JOIN MAJOR
ON NAME.ID = MAJOR.ID;
이외에도 특별한 상황에서 쓰이는 Self Join, Cross Join 등이 있다.
'Development > Database' 카테고리의 다른 글
[Database]mongoDB 튜토리얼 (0) | 2023.04.03 |
---|---|
[Database]B+Tree, B*Tree (0) | 2023.03.26 |
[Database]Index에 대하여 + B-Tree (2) | 2023.03.20 |
[Data]자바에도 있네, 데이터 분석 툴. Tablesaw (0) | 2023.02.17 |
[ES]Elastic Search, Lucene, 그리고 (2) | 2023.02.15 |
[Redis]레디스(Redis), 스프링부트에 캐싱 적용 (0) | 2023.01.19 |
- Total
- Today
- Yesterday
- 야경
- 파이썬
- 스프링
- Python
- 맛집
- 면접 준비
- 유럽
- 여행
- 세계여행
- Backjoon
- 알고리즘
- BOJ
- 중남미
- 남미
- Algorithm
- a6000
- 리스트
- 기술면접
- 동적계획법
- RX100M5
- 유럽여행
- 자바
- 세계일주
- 지지
- 세모
- spring
- java
- 칼이사
- 스트림
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |