[mySQL] 조인(JOIN) 작업에 대해 알아보기, 온라인 사전
Foreign Key(외래키): 다른 테이블에서 특정 row를 참조할 수 있게 해주는 컬럼.
이 글에서 '연산'이란?: 테이블을 합치는 작업
command + f 혹은 Ctrl + f로 원하는 구문 키워드 검색하면 유용하다.
목차
- 결합연산
- 집합연산
- ON과 USING
- ON과 WHERE의 차이
결합연산
JOIN: 여러 테이블 연결
LEFT OUTER JOIN
<테이블 이름1> LEFT OUTER JOIN <테이블 이름2> ON <row 정렬 조건>: 왼쪽에 있는 테이블을 기준으로 <테이블 이름2>를 가져오고 <row 정렬 조건>에 맞게 정렬한다.
SELECT
item.id,
item.name,
stock.item_id,
stock.inventory_count
FROM copang_main.item LEFT OUTER JOIN copang_main.stock
ON item.id = stock.item_id;
RIGHT OUTER JOIN
<테이블 이름1> RIGHT OUTER JOIN <테이블 이름2> ON <row 정렬 조건>
JOIN 테이블에 AS 붙이기
SELECT
i.id,
i.name,
s.item_id,
s.inventory_count
FROM copang_main.item AS i LEFT OUTER JOIN copang_main.stock AS s
ON i.id = s.item_id;
INNER JOIN
기준이 되는 테이블이 없음. 조건이 true인 레코드만 조회 및 정렬 (수학의 집합으로 치면, 두 테이블의 교집합을 구하는 것과 같음)
SELECT
i.id,
i.name,
s.item_id,
s.inventory_count
FROM copang_main.item AS i INNER JOIN copang_main.stock AS s
ON i.id = s.item_id;
집합연산
✨mySQL에서는 v8.0 기준 UNION 연산자만 지원한다.
UNION(합집합): 두 테이블의 row를 합친다. 중복되는 row는 하나만 남기고 나머지는 제거한다.
UNION ALL: 두 테이블의 row를 합친다. 중복되는 row를 제거하지 않는다.
SELECT * FROM table1
UNION
SELECT * FROM table2;
INTERSECT(교집합): 두 테이블의 공통된 row만 가져온다.
SELECT column_name FROM table1
WHERE EXISTS (SELECT column_name FROM table2);
MINUS(차집합): 첫 테이블에는 있지만 두 번째 테이블에는 없는 row만 가져온다.
SELECT table1.column_name FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name
WHERE table2.column_name IS NULL;
ON 과 USING
JOIN의 조건인 컬럼(COLUMN)이 서로 같을 때는 USING(<컬럼>)으로 사용 가능하다.
즉, ON old.id = new.id 와 USING(id)는 서로 같다.
ON과 WHERE의 차이
ON은 JOIN을 할 때의 조건들에 영향을 미치고, WHERE은 JOIN한 결과에서 각 row 별로 영향을 미친다.
'DB > mySQL' 카테고리의 다른 글
[mySQL] 서브쿼리 중첩의 문제점과 뷰(view) 이해하기 (0) | 2023.05.20 |
---|---|
[mySQL] 서브쿼리를 이용한 데이터 분석 (0) | 2023.05.19 |
[mySQL] 서브쿼리(subquery)에 대해 이해하기 (0) | 2023.05.19 |
[mySQL] 데이터 분석 함수 온라인 사전 (0) | 2023.05.17 |
[mySQL] 나를 위한 mySQL Workbench 온라인 사전 (0) | 2023.05.17 |