LabHub

SQL 실전 · 조회와 필터 · 실습

필터링과 표현식

LabHub 에서 이어서 보기

목표

BETWEEN, IN, LIKE, COALESCE, CASE, IS DISTINCT FROM, LIMIT/OFFSET 을 실제 데이터에 적용해 원하는 집합을 정확히 서술할 수 있게 됩니다.

왜 중요한가

SQL 에서 조건을 쓴다는 것은 집합을 정의하는 일입니다. 그리고 이 집합 연산에는 다른 언어에 없는 세 번째 진리값이 끼어듭니다. NULL 이 관여한 비교는 참도 거짓도 아닌 미지가 되고, WHERE 는 참인 행만 통과시키므로 미지는 조용히 걸러집니다.

이 성질 때문에 city = '서울'city <> '서울' 의 행 수를 더해도 전체가 되지 않습니다. 어느 쪽에도 속하지 않는 NULL 행이 있기 때문입니다. 이런 종류의 버그는 오류를 내지 않고 숫자만 조용히 틀리기 때문에 발견이 늦습니다. 이번 실습에서 직접 확인해 두면 나중에 리포트 숫자가 안 맞을 때 가장 먼저 의심할 곳이 생깁니다.

단계

1. price 가 50000 이상 150000 이하인 상품을 담는 뷰 v_mid_price 를 만듭니다.
2. statuspaid 또는 shipped 인 주문을 담는 뷰 v_multi_status 를 만듭니다.
3. name프로 라는 글자가 들어간 상품을 담는 뷰 v_pro_products 를 만듭니다.
4. 고객의 idcity 두 컬럼만 담되 city 가 비어 있으면 미상 으로 바꾼 뷰 v_city_filled 를 만듭니다. 컬럼 이름은 id, city 입니다.
5. 주문의 id 와 규모 분류를 담는 뷰 v_order_size 를 만듭니다. 컬럼은 id, size 이며, total_amount 가 1000000 이상이면 대형, 300000 이상이면 중형, 나머지는 소형 입니다.
6. city서울 이 아닌 고객을 담는 뷰 v_not_seoul 을 만듭니다. city 가 비어 있는 고객도 포함되어야 합니다.
7. 상품을 price 내림차순, 같으면 id 오름차순으로 정렬했을 때의 3페이지(한 페이지 20건)를 담는 뷰 v_page3 를 만듭니다.
8. countryKR, is_active 가 참, signup_date2024-07-01 이후(같은 날 포함), tiergold 또는 vip 인 고객의 id, name, tier, signup_date 를 담는 뷰 v_target 을 만듭니다. 정렬은 signup_date 내림차순, 같으면 id 오름차순입니다.

참고

단계 8개

  1. 가격 구간으로 좁히기
  2. 여러 값 중 하나 고르기
  3. 이름에 특정 문자열이 든 상품 찾기
  4. 빈 값을 기본값으로 채우기
  5. 조건에 따라 분류하기
  6. NULL 까지 포함해 뒤집기
  7. 3페이지 가져오기
  8. 조건 네 개를 조합한 타깃 목록