오늘은 sql 강의에서 UNION 파트를 듣고 공부했다.
2개 이상의 SELECT 문의 결과를 합쳐서 하나의 결과 집합으로 반환하는 데 사용되는 연산자. 여러 테이블을 세로로 합치는 데 사용된다.
SELECT *
FROM 테이블A
UNION
SELECT *
FROM 테이블B;
위의 쿼리에서 테이블A와 테이블B의 컬럼내용은 같아야 한다.
2개 이상의 테이블을 붙이고 싶으면 계속 UNION을 달아서 붙이면 된다.
붙인 테이블끼리 컬럼명이 다르면 첫 테이블의 컬럼명을 따른다
inquiry 테이블
inquiry_2019 테이블
UNION 쿼리
SELECT *
FROM inquiry
UNION
SELECT *
FROM inquiry_2019;
UNION 만 사용하면 중복 레코드를 허락하지 않는다.
UNION 대신 UNION ALL을 사용하면 중복 데이터도 그대로 출력된다.
SELECT *
FROM inquiry
UNION ALL
SELECT *
FROM inquiry_2019;
LIMIT을 원하는 테이블에 사용하려면 괄호를 적절하게 사용하면 된다.
SELECT *
FROM inquiry
UNION
SELECT *
FROM inquiry_2019
LIMIT 1;
통틀어서 1개의 결과만 나온다.
SELECT *
FROM inquiry
UNION
(
SELECT *
FROM inquiry_2019
LIMIT 1
);
원하는 대로 두번째 테이블에서만 1개의 결과로 합쳐진다.
(
SELECT *
FROM inquiry
LIMIT 2
)
UNION
(
SELECT *
FROM inquiry_2019
LIMIT 2
)
ORDER BY star;
inquiry 테이블과 inquiry_2019 테이블을 합쳐서 star가 4이상인 컬럼만 가져와라
각각의 SELECT문에 WHERE구를 붙여도 가능하다.
하지만 더 깔끔하게 한번에 연산하려면 FROM구에 UNION을 쓰고 서브쿼리로 넣은 다음 메인쿼리에서 WHERE구를 쓰는 것이 좋다.
UNION으로 붙인 테이블은 AS로 별명을 붙여야 한다.
SELECT *
FROM
(
SELECT *
FROM inquiry
UNION
SELECT *
FROM inquiry_2019
) AS a
WHERE star >= 4;
MySQL 외에 다른 DBMS에서는 UNION 말고도 2개 테이블의 차이를 구하는 EXCEPT(or MINUS)나 2개 테이블의 공통 부분만 덜어내는 INTERSECT 연산자를 쓰기도 한다.