Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프로그래머스
- 가상환경
- 선그래프
- 코딩테스트
- 파이썬
- String Method
- openCV
- javascript
- aws jupyter notebook
- Algorithm
- dataframe
- Selenium
- pandas
- 정보처리기사 c언어
- 알고리즘
- 노마드코딩
- 백준
- type hint
- Join
- programmers
- queue
- python
- Matplotlib
- NumPy
- 자료구조
- 데이터시각화
- 알고리즘 스터디
- Stack
- 알고리즘스터디
- MySQL
Archives
- Today
- Total
조금씩 꾸준히 완성을 향해
[MySQL] JOIN 테이블 결합하기(INEER, OUTER, CROSS, SELF) 본문
J O I N
- 두개 이상의 테이블을 서로 묶어서 하나의 결과 집합으로 만들어 내는 것을 말한다.
- 데이터베이스의 테이블은 중복과 공간낭비를 피하고 데이터의 무결성을 위해 여러 개의 테이블로 분리하여 저장된다. 이 분리된 테이블들이 가지는 관계(relation)를 활용해 테이블을 합칠 수 있다.
- 종류 : INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN
INNDER JOIN (내부 결합)
- 조인 중에서 가장 많이 사용되는 조인
- 공통된 열이 존재할 경우 사용 가능
-- 사용할 테이블 확인
mysql> select * from 상품; select * from 재고수;
+----------+--------+----------+------+----------+
| 상품코드 | 상품명 | 메이커명 | 가격 | 상품분류 |
+----------+--------+----------+------+----------+
| 0001 | 상품1 | 메이커1 | 100 | 식료품 |
| 0002 | 상품2 | 메이커2 | 200 | 식료품 |
| 0003 | 상품3 | 메이커3 | 1980 | 생활용품 |
+----------+--------+----------+------+----------+
+----------+------------+--------+
| 상품코드 | 입고일 | 재고수 |
+----------+------------+--------+
| 0001 | 2014-01-03 | 200 |
| 0002 | 2014-02-10 | 500 |
| 0003 | 2014-02-14 | 10 |
+----------+------------+--------+
-- Primary Key가 없을 경우 설정
ALTER TABLE 재고수 MODIFY 상품코드 CHAR(4) PRIMARY KEY;
-- 모든 열 가져오기
mysql> SELECT * FROM 상품
-> JOIN 재고수
-> ON 상품.상품코드 = 재고수.상품코드;
+----------+--------+----------+------+----------+----------+------------+--------+
| 상품코드 | 상품명 | 메이커명 | 가격 | 상품분류 | 상품코드 | 입고일 | 재고수 |
+----------+--------+----------+------+----------+----------+------------+--------+
| 0001 | 상품1 | 메이커1 | 100 | 식료품 | 0001 | 2014-01-03 | 200 |
| 0002 | 상품2 | 메이커2 | 200 | 식료품 | 0002 | 2014-02-10 | 500 |
| 0003 | 상품3 | 메이커3 | 1980 | 생활용품 | 0003 | 2014-02-14 | 10 |
+----------+--------+----------+------+----------+----------+------------+--------+
-- 특정 열만 가져오기 & 별칭설정
mysql> SELECT S.상품명, M.메이커명 FROM 상품2 S
-> INNER JOIN 메이커 M
-> ON S.메이커코드 = M.메이커코드;
+--------+----------+
| 상품명 | 메이커명 |
+--------+----------+
| 상품1 | 메이커1 |
| 상품2 | 메이커1 |
| 상품3 | 메이커2 |
+--------+----------+
OUTER JOIN (외부 결합)
조인의 조건에 만족되지 않는 행까지도 포함시키는 결합
LEFT OUTER JOIN (LEFT JOIN) : 왼쪽 테이블의 것은 모두 출력되어야 한다.
RIGHT OUTER JOIN (LEFT JOIN) : 오른쪽 테이블의 것은 모두 출력되어야 한다.
mysql> SELECT 상품3.상품명, 재고수.재고수
-> FROM 상품3 RIGHT JOIN 재고수
-> ON 상품3.상품코드 = 재고수.상품코드;
+--------+--------+
| 상품명 | 재고수 |
+--------+--------+
| 상품1 | 200 |
| 상품2 | 500 |
| 상품3 | 10 |
+--------+--------+
mysql> SELECT 상품3.상품명, 재고수.재고수
-> FROM 상품3 LEFT JOIN 재고수
-> ON 상품3.상품코드 = 재고수.상품코드;
+----------+--------+
| 상품명 | 재고수 |
+----------+--------+
| 상품1 | 200 |
| 상품2 | 500 |
| 상품3 | 10 |
| 추가상품 | NULL |
+----------+--------+
CROSS JOIN (교차 결합)
한쪽 테이블의 모든 행들과 다른 쪽 테이블의 모든 행을 조인시키는 기능
cross join 결과의 개수 = 두 테이블 개수를 곱한 개수
테스트로 사용할 많은 용량의 데이터를 생성할 때 주로 사용된다. ( ON 구문은 사용 불가)
대량의 데이터를 생성하면 시스템이 다운되거나 디스크 용량이 모두 찰 수 있다.
mysql> SELECT * FROM sample72_x -- A, B, C
-> CROSS JOIN sample72_y; -- 1, 2, 3
+------+------+
| x | y |
+------+------+
| C | 1 |
| B | 1 |
| A | 1 |
| C | 2 |
| B | 2 |
| A | 2 |
| C | 3 |
| B | 3 |
| A | 3 |
+------+------+
SELF JOIN (자기 결합)
한 테이블이 자기자신과 조인하는 기능
사용법은 일반적인 INNER JOIN과 같다.
mysql> select a.상품명, b.상품분류
-> from 상품 a
-> join 상품 b
-> on a.상품코드 = b.상품코드;
+--------+----------+
| 상품명 | 상품분류 |
+--------+----------+
| 상품1 | 식료품 |
| 상품2 | 식료품 |
| 상품3 | 생활용품 |
+--------+----------+
'Database > MySQL' 카테고리의 다른 글
[MySQL] VIEW (0) | 2022.09.21 |
---|---|
[MySQL] 조건문과 NULL ( IF, CASE, COALESCE, IFNULL) (0) | 2022.09.20 |
[MySQL] 문자 관련 함수 정리 (0) | 2022.09.19 |
[MySQL] 숫자 관련 함수 정리 (0) | 2022.09.18 |
[MySQL] subquery 서브쿼리 기본 사용예제 (0) | 2022.09.18 |