[SQL] 유니온(UNION)

간략 정리

테이블

User_recent

Id Contact Address
A 010-**-1234 광진구 자양동
B 010-**-7700 송파구 석촌동

User_past

Id Contact Address
C 010-**-4676 분당구 판교동

UNION

  • 컬럼명이 같아야 한다.(같지 않을 경우 AS를 사용하여 같게 만들어주면 된다.)
  • 컬럼별 데이터타입이 같아야 한다.
  • 두 테이블에 중복으로 들어있는 데이터는 DISTINCT 된다.
1
2
3
4
5
6
7
SELECT *
FROM User_recent

UNION

SELECT *
FROM User_past;
Id Contact Address
A 010-**-1234 광진구 자양동
B 010-**-7700 송파구 석촌동
C 010-**-4676 분당구 판교동

UNION ALL

  • 중복되는 데이터들을 생략하지 않고 원본의 모든 데이터를 단순히 이어붙인 결과
1
2
3
4
5
6
7
SELECT *
FROM User_recent

UNION ALL

SELECT *
FROM Users_past;
Id Contact Address
A 010-**-1234 광진구 자양동
B 010-**-7700 송파구 석촌동
C 010-**-4676 분당구 판교동
B 010-**-7700 송파구 석촌동

해커랭크 문제풀이

Symmetric Pairs

  • You are given a table, Functions, containing two columns: X and Y.

image

  • Two pairs (X1, Y1) and (X2, Y2) are said to be symmetric pairs if X1 = Y2 and X2 = Y1.
  • Write a query to output all such symmetric pairs in ascending order by the value of X. List the rows such that X1 ≤ Y1.

  • Sample Input

image

  • Sample Output
1
2
3
20 20
20 21
22 23

풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT X, Y
FROM functions
WHERE X = Y
GROUP BY X, Y
HAVING COUNT(*) = 2

UNION

SELECT f1.X, f1.Y
FROM functions AS f1
     INNER JOIN functions AS f2 ON f1.X = f2.Y AND f1.Y = f2.X
WHERE f1.X < f1.Y
ORDER BY X
0%