231108 TIL #237 SQL #11 UNION

김춘복·2023년 11월 8일
0

TIL : Today I Learned

목록 보기
237/543
post-custom-banner

Today I Learned

오늘은 sql 강의에서 UNION 파트를 듣고 공부했다.


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;


중복 허락 X

UNION 만 사용하면 중복 레코드를 허락하지 않는다.

  • 첫 테이블에 있는 레코드(3/경기도/40/3)를 두번째 테이블에 넣고 다시 UNION을 출력해본다.

    결과는 새로 레코드를 추가했음에도 그대로다. UNION만 사용할 경우 중복을 허락하지 않기 때문이다.

UNION ALL

UNION 대신 UNION ALL을 사용하면 중복 데이터도 그대로 출력된다.

SELECT *
FROM inquiry
UNION ALL
SELECT *
FROM inquiry_2019;


+ LIMIT 사용

LIMIT을 원하는 테이블에 사용하려면 괄호를 적절하게 사용하면 된다.

  • 괄호 없이 사용
SELECT *
FROM inquiry
UNION
SELECT *
FROM inquiry_2019
LIMIT 1;

통틀어서 1개의 결과만 나온다.

  • 두번째 테이블에서 괄호와 함께 사용
SELECT *
FROM inquiry
UNION
	(
	SELECT *
	FROM inquiry_2019
	LIMIT 1
	);

원하는 대로 두번째 테이블에서만 1개의 결과로 합쳐진다.

  • 양쪽 테이블에서 LIMIT 사용(+ORDER BY)
	(
	SELECT *
	FROM inquiry
    LIMIT 2
    )
UNION
	(
	SELECT *
	FROM inquiry_2019
	LIMIT 2
	)
ORDER BY star;


+ WHERE구

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;


UNION 이외의 연산자


MySQL 외에 다른 DBMS에서는 UNION 말고도 2개 테이블의 차이를 구하는 EXCEPT(or MINUS)나 2개 테이블의 공통 부분만 덜어내는 INTERSECT 연산자를 쓰기도 한다.

profile
Backend Dev / Data Engineer
post-custom-banner

0개의 댓글