[mySQL] 조인(JOIN) 작업에 대해 알아보기, 온라인 사전

DB/mySQL 2023. 5. 18.

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.idUSING(id)는 서로 같다.

 

 

ON과 WHERE의 차이

  ON은 JOIN을 할 때의 조건들에 영향을 미치고, WHERE은 JOIN한 결과에서 각 row 별로 영향을 미친다.