sungyup's.

PostgreSQL / SQL Basics / 2.7 Sorting

2.7Sorting

Handling Sets with Union

  • 가장 비싼 4개의 상품과 가장 가격/무게 비율이 높은 상품들 4개 표시(가격과 가격/무게 비율이 둘다 상위 4개에 속하면 중복건은 표시하지 않음)
    • 이 문제는 2개의 쿼리들을 합한 것으로, 첫번째 파트는

      sql
      SELECT * FROM products ORDER BY price DESC LIMIT 4;
    • 두번째 파트는,

      sql
      SELECT * 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 : 쿼리들에서 겹치는 데이터. 입력 데이터에 중복값이 있으면 여러번 보여줌.
    ⇒ 이걸 왜 쓰나 싶은데, sales data, transaction logic 같은 데이터가 양쪽 set에서 얼마나 자주 겹치는지 등을 볼 때 쓸 수 있음.

Removing Commonalities with Except

  • EXCEPT : 첫번째 쿼리에는 있는데 두번째 쿼리에는 없는 데이터

    ⇒ 다른 Set Operator(UNION, INTERSECT)와는 달리 쿼리의 순서가 결과에 영향을 미침