PostgreSQL / SQL Basics / 2.7 Sorting
2.7Sorting
Handling Sets with Union
- 가장 비싼 4개의 상품과 가장 가격/무게 비율이 높은 상품들 4개 표시(가격과 가격/무게 비율이 둘다 상위 4개에 속하면 중복건은 표시하지 않음)
-
이 문제는 2개의 쿼리들을 합한 것으로, 첫번째 파트는
sqlSELECT * FROM products ORDER BY price DESC LIMIT 4;
-
두번째 파트는,
sqlSELECT * FROM products ORDER BY price / weight DESC LIMIT 4;
-
이렇게 서로 다른 두 쿼리를 합하는 키워드가 UNION
sql( SELECT * FROM products ORDER BY price DESC LIMIT 4 ) UNION ( SELECT * FROM products ORDER BY price / weight DESC LIMIT 4 );
UNION
은 두 쿼리에서 조회된 데이터들 중 같은 데이터가 있으면(중복) 한 건만 보여줌UNION ALL
로 조회하면 중복건도 전부 보여줌
- 괄호는 필수가 아님.
- 두 쿼리는 같은 column들을 가진 데이터를 보여주는 방식으로 구성되어야함
- 또, 같은 column명들은 같은 데이터 타입을 가지고 있어야함
Commonalities with Intersect
UNION
처럼 여러 다른 쿼리들의 결과(각각의 결과를 Set이라고 함)를 함께 보여주는 쿼리들을 Set Operator(집합 연산자)라고 함.
INTERSECT
: 우선 입력 데이터에서 중복값을 제거하고, 이후 양쪽 쿼리들에서 겹치는 데이터들을 보여줌INTERSECT ALL
: 쿼리들에서 겹치는 데이터. 입력 데이터에 중복값이 있으면 여러번 보여줌.
Removing Commonalities with Except
-
EXCEPT
: 첫번째 쿼리에는 있는데 두번째 쿼리에는 없는 데이터⇒ 다른 Set Operator(
UNION
,INTERSECT
)와는 달리 쿼리의 순서가 결과에 영향을 미침