일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 6ixsense
- math함수
- 1차 프로젝트
- PlaceHolder
- graphql
- Join
- JavaScript
- INCENSE
- then
- 위코드
- aws
- EC2
- 조인
- Branch
- inner
- 보안 그룹 규칙
- AWSOME DAY
- typescript
- increment
- GitHub
- full
- 온라인 컨퍼런스
- docker
- Git
- nestjs
- 회고록
- Merge
- MySQL
- 콜백함수
- 트랜잭션
- Today
- Total
코딩 쏙쏙
[MySQL] JOIN(INNER, OUTER)-정리 본문
테이블 결합
테이블 결합은 RDBMS의 꽃이라 할 수 있는 중요한 개념이다.
데이터 베이스는 하나의 테이블에 많은 데이터를 저장하지 않고 데이터를 정규화해서 여러개의 테이블로 나누어 저장한다.
다양하고 복잡한 데이터를 보여주기 위해서는 복수의 테이블을 결합해 데이터 검색할 수 있어야 한다.
결합은 여러가지 결합이 존재하는데 교차 결합은 생략하고 내부 결합과 외부 결합에 대해서 알아보자.
조인(JOIN)
조인(Join)은 SELECT와 더불어 가장 많이 사용하는 옵션 중 하나이다.
두 개 이상의 테이블을 묶어서 하나의 결과 집합으로 만들어 낸다.
즉, 서로 다른 테이블에서 데이터를 가져올 때 사용하는 것이 조인(Join)이다.
INNER JOIN(내부 결합)
INNER JOIN은 조인 중 가장 많이 사용된다. 기준이 되는 테이블(left table)과 join이 되는 테이블(right table) 양쪽 모두 결합조건이 만족 되는 row만 검색하는 방법이다.
SELECT * FROM TableA A INNER JOIN TableB ON A.key = B.key;
조인하는 테이블의 ON절의 조건이 일치하는 결과만 출력
MySQL에서 JOIN, INNER JOIN, CROSS JOIN이 모두 같은 의미로 사용된다.
INNER JOIN 함축 구문
SELECT
u.userid,name
FROM usertbl as u
INNER JOIN buytbl as b
ON u.userid = b.userid
WHERE u.userid = "111"
// # INNER JOIN 함축 구문
SELECT
u.userid,name
FROM usertbl as u, buytbl as b
WHERE u.userid = "111"
위 코드를 보면 단순히 FROM 절에 콤마를 쓰면 INNER JOIN으로 치부된다.
OUTER (LEFT/RIGHT/FULL) JOIN(외부 결합)
외부 결합(OUTER JOIN)에는 대표적으로 LEFT JOIN, RIGHT JOIN, FULL JOIN이 있다. 외부 결합은 내부 결합과 함께 자주 사용되는 결합으로 결합(Join)하는 여러테이블에서 한 쪽에는 데이터가 있고, 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽 테이블을 기준으로 모두 출력하는 결합 방법이다.
LEFT JOIN
첫 번째 테이블을 기준으로 두 번째 테이블을 결합하는 JOIN이다.
SELECT users.name, posts.name
FROM users LEFT OUTER JOIN posts // users를 기준으로 왼쪽 조인
ON users.id = posts.user_id
※ 주의
1. LEFT JOIN은 INNER JOIN과 다르게 조인하는 테이블의 순서가 중요하다.
어느 순서로 테이블을 조인하는지에 따라 결과 테이블에 조회되는 행의 개수와 구성이 달라질 수 있다.
2. 조인을 여러 번 해야할 때 시작을 LEFT JOIN으로 했다면 나머지 조인도 LEFT JOIN으로 이어나가야 한다.
즉, LEFT JOIN을 쓰다가 INNER JOIN 이나 다른 조인을 사용하지 않아야 한다.
RIGHT JOIN
두 번째 테이블을 기준으로 첫 번째 테이블을 결합하는 JOIN이다.
SELECT users.name, posts.name
FROM users RIGHT OUTER JOIN posts // posts를 기준으로 오른쪽 조인
ON users.id = posts.user_id
FULL JOIN
SELECT * FROM users FULL OUTER JOIN posts
ON users.id = posts.user_id
대부분의 DB(Database)에서는 FULL OUTER JOIN을 지원하지 않는다. 그러나 간접적으로 구현하는 방법은 존재한다.
(SELECT * FROM users LEFT JOIN posts ON users.id = posts.user_id))
UNION
(SELECT * FROM users RIGHT JOIN posts ON users.id = posts.user_id))
LEFT JOIN한 테이블과 RIGHT JOIN한 테이블을 UNION 합집합 해주면 된다.
'[MySQL]' 카테고리의 다른 글
[MySQL]AUTO_INCREMENT초기화 (0) | 2023.04.12 |
---|---|
[MySQL] 테이블 정렬_페이지네이션(PagiNation) (0) | 2023.04.09 |
[MySQL] 사용법-2 (0) | 2023.04.02 |
[MySQL] 사용법-1 (0) | 2023.03.27 |