관계가 있는 두 개 이상의 테이블을 연결하여 데이터를 조회하는 작업을 진행할 때 JOIN을 사용함
INNER JOIN(내부조인)
- INNER JOIN 또는 JOIN
SELECT TABLE1.userid, COUNT(*)
FROM TABLE1
INNER JOIN TABLE2 ON TABLE1.userid = TABLE2.userid
WHERE ~ ;
참조
- GROUP BY를 사용하거나, DISTINCT 를 이용하여 중복값을 제거할 수 있음
SELECT DISTINCT TABLE1.userid
FROM TABLE1
INNER JOIN TABLE2 ON TABLE1.userid = TABLE2.userid
WHERE ~ ;
EXISTS
- JOIN을 사용하지 않고 WEHRE 절에 EXISTS문을 사용하여 동일한 결과를 낼 수 있음
SELECT TABLE1.userid
FROM TABLE1
WHERE EXISTS (SELECT * FROM TABLE2 WHERE TABLE1.userid = TABLE2.userid ~ ) ;
OUTTER JOIN(외부 조인)
- INNER JOIN과 다르게, JOIN 조건에 해당하지 않는 행까지 포함시켜 조회
- LEFT (OUTER) JOIN
- RIGHT (OUTER) JOIN
SELECT TABLE1.userid, COUNT(*)
FROM TABLE1
LEFT OUTER JOIN TABLE2 ON TABLE1.userid = TABLE2.userid
WHERE ~ ;
SELECT TABLE1.userid, COUNT(*)
FROM TABLE1
RIGHT OUTER JOIN TABLE2 ON TABLE1.userid = TABLE2.userid
WHERE ~ ;
CROSS JOIN(상호 조인)
- 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능
- 두 테이블의 행의 수를 곱한 만큼의 행이 출력됨
SELECT TABLE1.userid, TABLE2.itemname
FROM TABLE2
CROSS JOIN TABLE2
- 아래와 같이 FROM절에 테이블1, 테이블2 를 입력하여 동일한 결과를 출력할 수 있음
SELECT TABLE1.userid, TABLE2.itemname
FROM TABLE1, TABLE2
UNION / UNION ALL
- 두 쿼리의 결과를 합칠 때
SELECT id, name FROM TABLE1 ~
UNION
SELECT id, name FROM TABLE2 ~ ;
- 두 쿼리의 결과를 합침
- 단, 열의 수가 같아야 함
- UNION ALL과 차이는 중복되는 행을 제거함
- UNION ALL 보다 속도가 느림
SELECT id, name FROM TABLE1 WHERE ~
UNION ALL
SELECT id, name FROM TABLE1 WHERE ~ ;
- 두 쿼리의 결과를 합침
IN / NOT IN
- 조건절이나 제어문에서 사용하며 IN은 포함되는 값, NOT IN은 포함되지 않는 값을 정할 때 사용함
SELECT * FROM TABLE1 WHERE team IN ('레알마드리드', 'FC바르셀로나') ;
SELECT * FROM TABLE1 WHERE team NOT IN ('레알마드리드', 'FC바르셀로나') ;
'MySQL' 카테고리의 다른 글
15. EXISTS : 조건에 해당하는 ROW의 존재 유무 확인 (0) | 2023.07.27 |
---|---|
13. 피벗(Pivot) (0) | 2022.05.03 |
12. 숫자 함수 & 날짜 시간 함수 (0) | 2022.05.03 |
11. 문자열 함수(CONCAT, CONCAT_WS, FORMAT, LEFT, RIGHT, SUBSTRING_INDEX) (0) | 2022.05.03 |
10. 제어 흐름(IF, IFNULL, NULLIF, CASE~ WHEN~) (0) | 2022.05.03 |