티스토리 뷰

SQL

[SQL] 기초 공부 4일차

iblue 2022. 1. 6. 19:15
-- Product 테이블에서 price가 5이하 또는 200 이상인 상품들만 출력
SELECT *
FROM products
WHERE price<=5 OR price>=200;
-- Product 테이블에서 price가 5이하 또는 200 이상인 상품들만 출력
SELECT *
FROM products
WHERE price<=5

UNION

SELECT *
FROM products
WHERE price>=200

두 코드는 모두 같은 결과값을 가진다.

UNION 은 중복값을 제외하고 두 테이블을 결합한다.

UNION ALL 은 중복값을 포함해 두 테이블을 결합한다.

* 테이블간의 차는 EXCEPT, MINUS 를 활용할 수 있으나 오라클에서만 되고 MySQL 은 지원하지 않는다

 

-- 고객정보O 주문정보X
SELECT *
FROM customers
LEFT JOIN orders ON customers.customerid = orders.customerid

UNION

-- 고객정보X 주문정보O (비회원주문)
SELECT *
FROM customers
RIGHT JOIN orders ON customers.customerid = orders.customerid

MySQL 에서 지원하지 않는 FULL OUTER JOIN 을 사용하기 위해선 LEFT JOIN 과 RIGHT JOIN 테이블을 UNION 한다


연습문제

https://www.hackerrank.com/challenges/symmetric-pairs/problem?h_r=internal-search&isFullScreen=true 

 

Symmetric Pairs | HackerRank

Write a query to output all symmetric pairs in ascending order by the value of X.

www.hackerrank.com

연습문제 해설 : 테이블 내부에 특정 규칙을 충족하는 행을 찾아라

- 규칙 : x1=y2, x2=y1 이를 충족하는 행을 찾아라 (예) 20 21 21 20 -> 좌우반전된 모양

* 규칙에 만족하는 행이 인접해야 한다는 조건은 없다

- 규칙에 만족하면서 x1 <= y1 데이터만 출력한다

-- X = Y
SELECT X, Y
FROM functions
WHERE X=Y
GROUP BY X, Y
HAVING COUNT(*) = 2

UNION

-- X < Y
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 사용시 마지막 쿼리에서 정렬 가능

어려운 점

1. 문제 해석을 잘못했다. 규칙을 만족하는 행이 꼭 인접해야 한다고 생각했으나, 그런 조건은 없었다.

2. 모든 조건을 만족하는 행을 한번에 출력하려고 했다 -> UNION 을 활용한다

3. GROUP BY 에 대한 이해도 부족 -> COUNT(*)

4. SELF JOIN 에 대한 이해도 부족 -> 조건 부여

 

* 접근 방법

1. x1 = y1 즉 모든 데이터가 동일한 결과를 찾는다 (예) 20 20 20 20

1-1. GROUP BY 와 HAVING, COUNT 를 사용한다

2. 좌우반전된 데이터를 찾는다 (예) 20 21 21 20

2-1. 단,  x1 < y1 조건 만족해야 한다

3. 두 테이블을 더한다

3-1. x ASC 로 정렬해 출력한다

 

* 이 문제는 여러번 다시 풀어볼 것!

'SQL' 카테고리의 다른 글

[SQL] 기초 공부 3일차  (0) 2022.01.06
[SQL] 기초 공부 2일차  (0) 2022.01.04
[SQL] 기초 공부 1일차  (0) 2021.12.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함