Database/MySQL
MySQL_집합연산 UNION
StoneSeller
2022. 3. 8. 02:51
JOIN을 사용해 오른쪽에 데이터를 이어붙인다면
UNION은 위아래로 데이터를 이어붙이는 작업이다.
SELECT는 SELECT (ALL)이 default값이다.
중복을 제거하려면 SELECT DISTINCT 으로 선언해야한다.
UNION의 경우는 UNION (DISTINCT)가 default값이다.
다 출력하려면 UNION ALL으로 선언해야 한다.
Product 테이블에서 price <=5이거나 price >= 200인 상품들만 출력하고 싶다.
SELECT *
FROM Products
WHERE price <=5
UNION
SELECT *
FROM Products
WHERE price >= 200
FULL OUTER JOIN을 구현하고자 할 때,
LEFT JOIN 과 RIGHT JOIN을 UNION으로 묶어 주면 된다.
SELECT *
FROM Custoemrs
LEFT JOIN Orders ON Custoemrs.custoemrId = Orders.CustomerId
UNION
SELECT *
FROM Custoemrs
RIGHT JOIN Orders ON Custoemrs.custoemrId = Orders.CustomerId
HackerRank: Symmetric Pairs
문제의 요구사항은 다음과 같다.
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.
위의 조건을 만족시키는 경우는 X1=Y1=X2=Y2이거나
X1 < Y1, X2 > Y2이면서 symmetric 한 경우이다.
두 경우의 조건을 각각 구한 후 UNION으로 합한다.
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 -- UNION을 사용하는 경우 마지막에 ORDER BY를 써줘야 정렬이 된다.
728x90