Coding Diary.

(SQL) UNION 이용해서 데이터 추가하기 총정리 본문

Coding/SQL

(SQL) UNION 이용해서 데이터 추가하기 총정리

life-of-nomad 2024. 6. 3. 14:26
728x90
반응형
지난 글에서 두 데이터세트를 나란히 결합할 수 있는 JOIN에 대해 알아보았습니다. 이번 글에서는 데이터를 다른 데이터 위에 쌓아야 할 하는 경우 유용한 UNION 에 대해 알아보겠습니다.

 

🔻(참고)여러가지 JOIN🔻

 

(SQL) FULL OUTER JOIN, SELF JOIN과 비교 연산자를 사용한 JOIN 총정리

지난 글에서 LEFT, RIGHT, INNER JOIN 에 대해 알아보았습니다. 이번 글에서는 FULL OUTER JOIN, SELFT JOIN과 비교 연산자를 사용한 JOIN에 대해 알아보겠습니다. 🔻(참고)LEFT,RIGHT,INNER JOIN🔻 (SQL) JOIN, LEFT JOIN,

life-of-nomad.tistory.com

 

 

(SQL) JOIN, LEFT JOIN, RIGHT JOIN 정리 및 연습문제

1) JOIN : 한 번에 둘 이상의 테이블에서 데이터를 가져올 수 있도록 함JOIN 문을 추가하면 ON 문도 추가됨SELECT orders.*, accounts.* #테이블 이름은 항상 마침표 앞/ 열은 항상 마침표 뒤FROM ordersJOIN account

life-of-nomad.tistory.com

 

1. UNION

  • UNION 연산자는 2개 이상의 SELECT 문과 결과 집합을 결합하는 데 사용됩니다.
  • UNION 내의 각 SELECT 문은 데이터 유형이 유사한 결과 집합에서 동일한 수의 필드를 가져야 합니다.
    • 두 테이블의 열 수가 같아야 함
    • 해당 열은 첫 번째 테이블과 동일한 순서로 동일한 데이터 유형을 가져야 함
    • 열 이름이 같을 필요는 없지만 일반적으로 같음
  • 동일한 데이터세트의 다른 부분을 함께 연결하는 경우 유용합니다.
  • 주의할 점은, UNION은 고유한 값만 추가한다는 것입니다.
  • 즉, UNION을 사용하면 데이터세트가 추가되고 첫 번째 테이블 행과 정확히 같은 추가된 데이터세트의 모든 행이 삭제됩니다.
  • 만약 두 번째 테이블의 모든 값을 추가하려면 UNION ALL 을 사용합니다.
  • 결합할 때 두 개의 개별 선택문을 작성하기 때문에 추가하기 전에 다르게 처리할 수 있습니다.
  • 예를 들어, 다른 WHERE 절을 사용하여 첫번째 테이블에서 'Facebook'과 동일한 행만 표시하는 코드는 아래와 같습니다.
SELECT *
FROM web_events
WHERE channel = 'facebook'

UNION ALL

SELECT *
FROM web_events_2
  • 두 개의 SELECT 문을 함께 결합하면 개별 부분이 아니라 전체 데이터세트에 대해 작업을 수행할 수 있습니다.
  • 결합된 결과가 단일 결과 집합으로 처리되도록 서브쿼리에서 함께 결합하여 이를 수행할 수 있습니다.
SELECT channel, COUNT(*) AS sessions
FROM (
    SELECT *
    FROM web_events
    
    UNION ALL
    
    SELECT *
    FROM web_events_2
    ) web_events
GROUP BY 1
ORDER BY 2 DESC

  • 위와 같이 이 두 테이블에서 결합된 결과를 가져와 채널 별로 모든 세션을 계산할 수 있습니다.

 

2. WITH를 이용한 UNION

  • 위의 방법을 수행하는 더 깔끔한 방법은 WITH를 사용해  UNION을 수행한 다음 기본 쿼리에서 집계를 하는 것입니다.
WITH web_events AS (
    SELECT *
    FROM web_events
    
    UNION ALL
    
    SELECT *
    FROM web_events_2
    ) 

SELECT channel, COUNT(*) AS sessions
FROM web_events
GROUP BY 1
ORDER BY 2 DESC
  • 결과는 동일하지만 쿼리 논리를 읽는 것이 훨씬 쉽습니다.

🔻(참고)WITH 서브쿼리🔻

 

(SQL) WITH 서브쿼리 연습문제

예제) 각 channel의 하루 평균 이벤트 수먼저, DATE_TRUNC를 이용해 날짜별로 그룹을 만들어줍니다.DATE_TRUNC개념 🔻 (SQL) DATE_TRUNC DATE_PART 개념 및 연습문제1) DATE_TRUNC날짜, 시간 열의 특정 부분으로 날

life-of-nomad.tistory.com

 

728x90
반응형