티스토리 뷰
JOIN
JOIN(조인)은 데이터베이스 내의 여러 테이블에서 가져온 데이터를 조합하여 하나의 테이블이나 결과로 보여준다. 서로 다른 두 개 이상의 테이블을 관련된 필드를 기준으로 묶어서 한번에 보여주고 싶을 때 사용한다.
INNER JOIN
JOIN이라고 하면 보통 INNER JOIN을 말한다. INNER는 생략해도 된다. 결합 조건을 만족하는 데이터만 보여준다.
서로 다른 테이블의 같은 이름의 컬럼을 SELECT 할 때 ambiguous가 발생하지 않도록 주의해야한다.
// 2개 테이블일 때
SELECT `컬럼명` FROM `테이블명` JOIN `참조할 테이블명` ON `조건` [WHERE 검색조건]
SELECT `컬럼명` FROM `테이블명` INNER JOIN `참조할 테이블명` ON `조건` [WHERE 검색조건]
// 예시
SELECT `table1.id, table1.name, table2.user_id` FROM `table1` JOIN `table2` ON `table1.id = table2.user_id`;
// 3개 이상 테이블일 때
// JOIN ~ ON ~ 을 계속 붙이면 됨
SELECT (결과로 보여줄) `컬럼1`, `컬럼2`, `컬럼3` ... FROM `테이블1` JOIN `테이블2` ON `조건` JOIN `테이블3` ON `조건`;
OUTER JOIN
INNER JOIN은 두 테이블 모두에 내용이 있는 경우에만 결과가 검색되고, OUTER JOIN은 한 테이블만 내용이 있어도 결과가 검색된다. 조건에 맞지 않는 데이터는 NULL로 가져오며 조건에 맞지 않는 데이터까지 표시하고 싶을 때 사용한다.
INNER JOIN은 어느 테이블을 먼저 읽어도 결과가 달라지지 않지만 OUTER JOIN은 OUTER가 되는 테이블에 따라서 결과가 달라진다.
LEFT JOIN
첫 번째 테이블의 데이터를 모두 선택한 후 두 번째 테이블의 데이터를 결합 조건에 따라 매칭한다. 매칭되는 데이터가 없는 경우 null로 표시한다. OUTER는 생략할 수 있다. 기준이 되는 테이블(FROM 뒤에 적은 왼쪽 테이블)에 참조할 테이블(LEFT JOIN 뒤에 적은 오른쪽 테이블) 값이 조합되고 값이 없으면 null로 표현된다.
SELECT `컬럼명` FROM `테이블명(기준 테이블)` LEFT JOIN `참조할 테이블명` ON `조건` [WHERE 검색조건]
SELECT `컬럼명` FROM `테이블명(기준 테이블)` LEFT OUTER JOIN `참조할 테이블명` ON `조건` [WHERE 검색조건]
RIGHT JOIN
두번째 테이블의 데이터를 모두 선택한 후 첫 번째 테이블의 데이터를 결합 조건에 따라 매칭한다. 매칭되는 데이터가 없는 경우 null로 표시한다. OUTER는 생략할 수 있다. 기준이 되는 테이블(RIGHT JOIN 뒤에 적은 오른쪽 테이블)에 참조할 테이블(FROM 뒤에 적은 왼쪽 테이블) 값이 조합되고 값이 없으면 null로 표현된다.
SELECT `컬럼명` FROM `참조할 테이블명` RIGHT JOIN `테이블명(기준 테이블)` ON `조건` [WHERE 검색조건]
SELECT `컬럼명` FROM `참조할 테이블명` RIGHT OUTER JOIN `테이블명(기준 테이블)` ON `조건` [WHERE 검색조건]
FULL OUTER JOIN
FULL OUTER JOIN은 두 테이블의 조건에 맞지 않는 데이터를 모두 보려고 할 때 사용한다. MySQL은 FULL JOIN 명령어를 제공하지 않기 때문에 LEFT JOIN과 RIGHT JOIN의 UNION 명령어로 합집합을 구해 FULL JOIN의 값을 얻을 수 있다.
// 중복을 제거한 집합
UNION
// 중복을 제거하지 않은 집합
UNION ALL
SELECT `컬럼명` FROM `table1(기준테이블)` LEFT JOIN `table2(참조테이블)` ON `조건` [WHERE 검색조건]
UNION
SELECT `컬럼명` FROM `table1(참조테이블)` RIGHT JOIN `table2(기준테이블)` ON `조건` [WHERE 검색조건];
// 2개의 테이블을 FULL OUTER JOIN
SELECT * FROM `table1` LEFT JOIN `table2` ON `조건` [WHERE 검색조건] > table1을 기준으로 table2가 합쳐진 결과
UNION
SELECT * FROM `table1` RIGHT JOIN `table2` ON `조건` [WHERE 검색조건]; > table2을 기준으로 table1이 합쳐진 결과
// 두 테이블의 조건에 맞지 않는 데이터까지 비교해서 볼 수 있음
// 테이블이 3개일 때
SELECT * FROM table1
LEFT JOIN table2 ON table1.id = table2.id
LEFT JOIN table3 ON table1.id = table3.id > table1을 기준으로 JOIN
UNION
SELECT * FROM table1
RIGHT JOIN table2 ON table1.id = table2.id
LEFT JOIN table3 ON table2.id = table3.id > table2를 기준으로 JOIN
UNION
SELECT * FROM table1
RIGHT JOIN table2 ON table1.id = table2.id
RIGHT JOIN table3 ON table2.id = table3.id; > table3을 기준으로 JOIN
// 결과값들이 모두 합해진 값을 볼 수 있음
CROSS JOIN
조건없이 모든 데이터를 보여준다.
SELECT `컬럼명` FROM `테이블1` CROSS JOIN `테이블2`;
컬럼 삭제
ALTER TABLE `테이블명` DROP COLUMN `컬럼명`;
'공부 노트' 카테고리의 다른 글
웹서비스의 역사와 발전 (0) | 2022.08.10 |
---|---|
[Prisma] ORM prisma로 데이터베이스 다루기 (0) | 2022.08.10 |
작은따옴표(single quotes)와 큰따옴표(double quotes)의 차이점? 둘 중 무엇을 써야할까? single quotes vs double quotes (0) | 2022.07.25 |
[HTML] <form> 관련 html tag, 이미지 관련 html tag (0) | 2022.07.20 |
[Udemy] Learn The Linux Command Line: Basic Commands (0) | 2022.07.11 |
- Total
- Today
- Yesterday
- vue
- 김버그
- html
- git
- 회고
- js
- CSS
- 깃
- 드림코딩
- Til
- 코딩앙마
- 저스트코드
- TS
- 구름에듀
- 스파르타코딩클럽
- React
- 타입스크립트
- Python
- 파이썬
- Typescript
- 비주얼스튜디오코드
- 자바스크립트
- map
- javascript
- 제이쿼리
- 제로초
- 리액트
- scss
- vscode
- 코드잇
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |