MySQL에서는
INNER JOIN, LEFT JOIN, RIGHT JOIN, CROSS JOIN을 사용해
여러 테이블을 합쳐 필요한 값만 가져올 수 있는데
각각 두 테이블에서 같은 값만(INNER JOIN)
왼쪽에만 값이 있어도(LEFT JOIN)
오른쪽에만 값이 있어도(RIGHT JOIN)
모든 경우의 수가 나오게(CROSS JOIN)
기능은 차례대로 알아보자
먼저 TB1 테이블에는 영희와 철수라는 값이 들어있고
TB2 테이블에는 영희와 희영이라는
값이 들어있다는 것을 전제로 한다
INNER JOIN
INNER JOIN은 두 테이블에서 조건이 같은 값만 가져오는데
SELECT ...
FROM 테이블A INNER JOIN 테이블B
ON A.컬럼명 = B.컬럼명
위의 쿼리와 같이
FROM 테이블A INNER JOIN 테이블B
ON A.컬럼명 = B.컬럼명
으로 JOIN 시켜주면 조건이 같은 값만 나오게 된다
위 예제에서는 TB1에는 영희와 철수
TB2에는 영희와 희영이 들어있으니
조회 시에는 동일한 영희만 출력된다
LEFT, RIGHT JOIN
LEFT, RIGHT JOIN은
LEFT RIGHT 기준으로 한 테이블에 값이 들어있으면
다른 테이블에는 값이 들어있지 않아도
ROW가 출력되게 되는데
-- LEFT, RIGHT OUTER JOIN (한쪽에만 값이 있어도 출력)
SELECT A.컬럼명, B.컬럼명
FROM 테이블A A LEFT OUTER JOIN 테이블B B
ON A.컬럼명 = B.컬럼명;
위와 같은 쿼리로 JOIN 시켜주면 된다
위 예제에서는 TBL1에는 철수, 영희가 들어있고
TBL2에는 영희, 희영이 들어있는데
LEFT JOIN을 사용하면
TBL2에는 '철수'라는 값이 없어도 TBL1에 있기 때문에
TBL2의 NAME 컬럼 동일 여부와는 상관없이
출력시키는 것을 볼 수 있다
여기서 LEFT OUTER JOIN이 아닌 LEFT JOIN만 써도 동작하는데
LEFT OUTER JOIN이 모든 데이터베이스에 먹히는 ANSI 방식이라
ANSI를 사용하면 DB별 JOIN 방법을 배울 필요가 없어지니
OUTER를 넣고 JOIN하는 것을 권장한다
CROSS JOIN
마지막으로 모든 경우의 수가 나오게 하는 CROSS JOIN인데
두 테이블에서 모든 경우의 수를 볼 일이 딱히 없기 때문에
실제 업무에서는 거의 사용되지 않는다
하지만 사용방법은 짚고 넘어가자면
SELECT 컬럼
FROM 테이블A A CROSS JOIN 테이블B B
위와 같이 두 테이블 사이에 CROSS JOIN을 넣어 조회를 하니
두 테이블의 모든 경우의 수가 나오는 것이 보인다
마지막으로 예제에 사용한 쿼리는 아래와 같다
WITH TBL1 AS -- 가상 테이블
(
SELECT '철수' AS NAME
UNION ALL
SELECT '영희' AS NAME
),
TBL2 AS
(
SELECT '영희' AS NAME
UNION ALL
SELECT '희영' AS NAME
)
-- INNER JOIN (같은 항목만 조회)
SELECT A.NAME
FROM TBL1 A INNER JOIN TBL2 B
ON A.NAME = B.NAME;
-- LEFT, RIGHT OUTER JOIN (한쪽에만 값이 있어도 출력)
SELECT A.NAME, B.NAME
FROM TBL1 A LEFT OUTER JOIN TBL2 B
ON A.NAME = B.NAME;
SELECT A.NAME, B.NAME
FROM TBL1 A RIGHT OUTER JOIN TBL2 B
ON A.NAME = B.NAME;
-- CROSS JOIN (모든 경우의 수가 나오게)
SELECT A.NAME, B.NAME
FROM TBL1 A CROSS JOIN TBL2 B;
'SQL > MySQL' 카테고리의 다른 글
MySQL DATEDIFF, TIMESTAMPDIFF를 이용한 날짜 차이 비교방법 (0) | 2021.01.15 |
---|---|
MySQL 테이블 컬럼 조회방법 (0) | 2021.01.15 |
MySQL WITH 절 사용법 및 예제(가상 테이블) (1) | 2021.01.08 |
MySQL ON DUPLICATE KEY(MERGE INTO) 사용방법 (0) | 2021.01.08 |
MySQL 조회 삽입 변경 삭제방법 정리 (0) | 2021.01.07 |
댓글