JOIN - 테이블 끼리 결합
SELECT 컬럼명
FROM 첫번째 테이블명 JOIN 두번째 테이블명;
-- ON과 WHERE가 들어간걸 많이 사용
SELECT 컬럼명
FROM 첫번째 테이블명 JOIN 두번째 테이블명
ON 테이블 조건식
WHERE 조건식;
SELECT *
FROM table_a JOIN table_b;
-- 두 테이블 결합하면
-- 첫번째 테이블 왼쪽 끝에 두번째 테이블이 붙고
-- 조회된 레코드 수는 A테이블 row * B테이블 row
-- 컬럼 수는 A테이블 열 + B테이블 열
올바르게 카테고리가 1. 음료수 / 2. 반찬인걸 정확하게 알고 싶다면 조건식을 추가해 조회
SELECT *
FROM table_a JOIN table_b
WHERE table_a.category_id = table_b.category_id;
-- 컬럼명이 하나의 테이블에만 있을 때 테이블명 생략 가능
-- 같은 컬럼명이 여러테이블에 있다면 테이블 명 작성
ON - 테이블 끼리의 조건
-- 일반적으로 JOIN에서는 ON으로 테이블끼리 조건을 맞춤
-- ON으로 조건을 맞춘 데이터 중 WHERE로 최종적으로 원하는걸 조회
SELECT *
FROM table_a JOIN table_b ON table_a.category_id = table_b.category_id
WHERE product_name = '콜라';
-- AS 이용해 간결하게 변경 가능 (AS 생략 가능)
SELECT *
FORM table_a a JOIN table_b b ON a.category_id = b.category_id
WHERE product_name = '콜라';
3개 이상 JOIN 할 때
SELECT 컬럼명
FROM 테이블명
JOIN 조인할 테이블명
ON 테이블 조건식
JOIN 조인할 테이블명
ON 테이블 조건식
WHERE 조건식;
LEFT JOIN, RIGHT JOIN
-- LEFT JOIN 은 a, b 테이블의 교집합과 왼쪽 테이블(a)에만 있는 데이터를 출력
SELECT * FROM table_a a LEFT JOIN table_b b ON a.col1 = b.col1;
-- RIGTH JOIN 은 a, b 테이블의 교집합과 오른쪽 테이블(b)에만 있는 데이터를 출력
SELECT * FROM table_a a RIGHT JOIN table_b b ON a.col1 = b.col1;
USING - ON절을 줄임
-- USING에 기재된 컬럼의 이름을 찾아서 매칭
SELECT * FROM 테이블명 a JOIN 테이블명 b USING (공통된 이름의 컬럼명);
-- 예제
SELECT * FROM products p JOIN suppliers s USING (SupplierID);
NATURAL JOIN - 알아서 테이블간의 같은 이름의 컬럼을 찾아서 JOIN 해준다, ON 사용 안함
-- 같은 컬럼의 이름을 찾아서 매칭
SELECT * FROM 테이블명 a NATURAL JOIN 테이블명 b;
-- 예제
SELECT * FROM products p NATURAL JOIN suppliers s;
예제1)
-- customers = 고객 / orders = 주문 데이터
-- 만약 고객중 한번도 주문 안한사람을 찾으시오
SELECT *
FROM customers c LEFT JOIN orders o
ON c.CustomerID = o.CustomerID
WHERE O.CustomerID IS NULL;
-- 풀이
-- customers기준으로 LEFT JOIN을 활용
-- 그럼 orders 쪽에 주문을 안한 사람이 있다면 NULL 데이터가 있음
-- WHERE문으로 IS NULL로 orders의 customerID기준으로 NULL 인 데이터를 찾으면 됨
예제2) - 같은 테이블 JOIN
-- 같은 테이블을 JOIN 가능
-- 'Ipoh Coffee' 보다 비싼 상품명 조회
SELECT p2.ProductName, p2.Price
FROM products p1 JOIN products p2
WHERE p1.Price < p2.Price AND p1.ProductName = 'Ipoh Coffee' ORDER BY p2.Price DESC;
JOIN Tip!
여러개 JOIN 할때 다이어그램 띄워놓고 서로 연관되어 있는 pk값 보면서 JOIN 하기
반응형
'DataBase' 카테고리의 다른 글
UNION(CROSS JOIN, FULL OUTER JOIN) (Maria DB) (0) | 2023.10.13 |
---|---|
서브쿼리 (SubQuery) (Maria DB) (0) | 2023.10.13 |
데이터베이스 정규화(Normalization) (0) | 2023.10.12 |
DATABASE, SCHMA / Table 생성하기 (Maria DB) (0) | 2023.10.12 |
Maria DB SQL 쿼리문 (0) | 2023.10.06 |