테이블을 연결시켜보자!
테이블 연결?
- primary key로 각 테이블을 연결 시켜서 볼 수 있음
- 필요한 데이터끼리 잘 묶어서 테이블을 구분 해 둬야 잘 설계된 DB임.. (수정이 필요할때 모든 자료를 다 찾아서 수정하게 되는것을 방지..)
JOIN
(Merge)
- 내가 보는 테이블에 추가로 알고싶은 정보가 담긴 테이블을 가져와서 붙이는것
SELECT 주문.*, 사용자.name
FROM data.orders AS 주문
JOIN data.users AS 사용자
ON 주문.order_id = 사용자.order_id
ON 이 JOIN되는 조건. order_id가 같을때 JOIN 해!
- 여러개를 JOIN하고싶으면 반복해서 쓰면됨
SELECT O.*, P.category, P.name
FROM data_pre.orders O
JOIN data_pre.products P
ON O.product_id = P.product_id
JOIN data_pre.users U
엑셀의 V-lookup과 굉장히 흡사하구나...!!
JOIN
의 종류
- INNER JOIN (교집합)
- 테이블에서 중복되는 항목의 데이터만 가져오는 join
SELECT
FROM table1
JOIN table2
또는
SELECT
FROM table1
INNER JOIN table2
- FULL (OUTER) JOIN (합집합)
- 테이블의 모든 데이터를 가져옴
- 없는 값은 NULL 이 됨
SELECT
FROM table1
FULL JOIN table2
또는
SELECT
FROM table1
FULL OUTER JOIN table2
- LEFT (OUTER) JOIN
- 왼쪽 테이블의 데이터(먼저나온것) 를 유지한 채 다른쪽 데이터를 가져옴
SELECT
FROM table1
LEFT JOIN table2
또는
SELECT
FROM table1
LEFT OUTER JOIN table2
- RIGHT (OUTER) JOIN
- 오른쪽 테이블의 데이터를 유지한 채 다른쪽 데이터를 가져옴 (LEFT와 방향만 반대)
- 실제 업무에선 테이블 순서바꿔서 LEFT JOIN 을 주로 사용함
- 오른쪽 테이블의 데이터를 유지한 채 다른쪽 데이터를 가져옴 (LEFT와 방향만 반대)
SELECT
FROM table1
RIGHT JOIN table2
또는
SELECT
FROM table1
RIGHT OUTER JOIN table2
ON
과 WHERE
의 차이
- ON에 있는 조건절은 테이블이 JOIN되기 전에 실행됨
- WHERE에 있는 조건절은 테이블이 JOIN된 후에 실행됨
SELECT o.*, p.category,p.name
FROM `orders` o LEFT JOIN `products` p
ON o.product_id = p.product_id
AND p.category = "Furniture"
ON절은 JOIN전에 실행되기때문에 category가 Furniture인것만 join되었음
SELECT o.*, p.category,p.name
FROM `orders` o LEFT JOIN `products` p
ON o.product_id = p.product_id
WHERE p.category = "Furniture"
WHERE절은 JOIN이후에 실행되기 때문에 Null없이 Furniture인 값만 필터링해서 보여줌. row가 줄었음
JOIN을 할 때엔 내가 필요한 테이블을 잘 고려해서 사용해야합니다!
UNION
- 테이블을 세로로 붙여주는 것 (아래에)
- JOIN은 새로운 컬럼이 생기는것
- UNION은 새로운 로우가 생기는것
JOIN은 로우에 대해 더 깊게 아는것, UNION은 더 넓은 로우를 알수 있게 하는것...? 정도일까?
SELECT *
FROM table1
UNION ALL ---UNION DISTINCT를 쓰면 중복을 제거해줌
SELECT *
FROM table2
- 컬럼 명이 다르면 어떻게 될까?
- 가능!
- UNION하는 컬럼 수가 다르면 어떻게 될까?
- UNION 불가능 !
- 컬럼의 데이터 타입이 다르면요?
- UNION 불가능 !
- 컬럼의 수가 같고, 데이터타입이 같은 경우엔?
- 가능! (다만 데이터는 부정확)
SELECT *
FROM table1
UNION ALL
SELECT *
FROM table2
UNION ALL
SELECT *
FROM table3
Author And Source
이 문제에 관하여(테이블을 연결시켜보자!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@joonfly/테이블을-연결시켜보자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)