멋쟁이 사자처럼 AI School 8기 - WIL-6주차

JiWOn·2023년 2월 2일
0
post-thumbnail

6주차 일정

    • 이범재 강사님 - SQL HAVING, ORDER BY, 연습문제
    • 이범재 강사님 - SQL 숫자, 문자열 함수, 날짜 함수, 연습문제
    • 이범재 강사님 - SQL 조건분기, JOIN, 연습문제
    • 이범재 강사님 - SQL 집합, 서브쿼리, 연습문제

학습 내용

📝20230120 이범재 강사님 SQL 수업내용 필기
📝20230125 이범재 강사님 SQL 수업내용 필기
📝20230126 이범재 강사님 SQL 수업내용 필기
📝20230127 이범재 강사님 SQL 수업내용 필기

일주일 내용 키워드 정리

GROUP BY

  • GROUP BY 는 반드시 집계함수와 함께 다닌다.
  • SELECT 문에 있는 모든 열은 집계 함수가 되거나 GROUP BY 절에 나타나야 합니다. GROUP BY 절을 사용하는데 만약 SELECT 문에 집계 함수를 사용하지 않거나 GROUP BY 절에 언급되지 않은 열이 존재한다면 오류가 발생합니다.
  • 문제에서 ~별 하는게 다 GROUP BY
  • 새로운 컬럼도 GROUP BY 가능!

HAVING, ORDER BY

HAVING

  • WHERE 이랑 비슷하지만 다른 함수
  • WHERE 은 원초적인 데이터에 필터를 걸어주지만
  • HAVING 은 완성된 데이터에 다시 필터를 걸어주는 함수
    • 그래서 SELECT로 만들어낸 컬럼값에 대해 필터를 걸어줄 수 있음

ORDER BY

보기 순서를 원하는 컬럼에 따라 순서대로 배열해줌

  • 오름차순
ORDER BY 컬럼명 ASC

ORDER BY 컬럼명
  • 내림차순
ORDER BY 컬럼명 DESC

🤔생각하는 순서

  1. SELECT
  2. FROM
  3. WHERE
  4. GROUP BY
    1. HAVING
  5. ORDERBY
  6. LIMIT

1. 집합

여러 개의 테이블을 세로로 합치는 것!!

JOIN은 가로로 합침

1) 합집합 UNION

두 개의 테이블을 합침!

  • ALL : 모두 보여줌
  • distinct : 중복 제거

2. INTERSECT(교집합)

  • 겹치는 값만 가져오기
  • !!! 무조건 !!! INTERSECT DISTINCT 이렇게 만 있음

3. EXCEPT(차집합, A-B)

A에 교집합을 빼는 거라 생각하면 됨!

  • 집합에서 필드명이 모두 같지 않아도 괜찮지만 다만 타입은 같아야 함.
📝 여러개의 집합을 할 때에는 `()` 가 필요함!!!

2. 서브쿼리

서브쿼리는 다른 SQL문 안에 중첩된 SELECT 문

where 절 안의 서브쿼리

국가가 ‘Brasil’인 유저의 주문정보(orders)를 조회 하는 쿼리입니다

select *
from `thelook_ecommerce.orders` o
where user_id in (
  select id
  from `thelook_ecommerce.users`
  where country = 'Brasil'
);

주문수가 3건 이상인 유저의 id와 이름을 조회합니다.

select user_id,
from `thelook_ecommerce.orders`
group by user_id
having count(order_id)>=3
select id, first_name, last_name
from `thelook_ecommerce.users`
where id in(
  select user_id
  from `thelook_ecommerce.orders`
  group by user_id
  having count(order_id)>=3
)

from 절 안의 서브쿼리

유저의 id와 이름 그리고 주문수를 조회

users테이블의 정보와 user별 주문수를 조회하는 서브쿼리를 left join을 이용하여 연결해서 유저의 주문수를 조회

select u.id, o.order_count
from `thelook_ecommerce.users` u
join (
  select user_id, count(order_id) as order_count
  from `thelook_ecommerce.orders`
  group by user_id
)o on u.id = o.user_id

select 절 안의 서브쿼리

user 정보를 조회합니다. 해당 유저의 주문수(order_count)를 조회하기 위해 select 절에서 서브쿼리를 사용하였습니다.

select id,
  first_name,
  last_name,
  (select count(order_id) from `thelook_ecommerce.orders` where user_id = u.id )as order_count
from `thelook_ecommerce.users` u
order by order_count desc

WITH

with 절은 쿼리 내에서 임시 결과를 정의하고 사용합니다.

주요 사용 목적은 복잡한 추출 과정을 분할하여 단계적으로 처리하면서 전체 데이터 추출과정을 단순화시키는 것 입니다.

사용법

WITH CTE명 AS ( 쿼리 표현식 )

WITH user_data AS (select id from `thelook_ecommerce.users`)
select * from user_data

1) user_data CTE(유사 테이블)을 정의합니다. 내용은 users의 id값을 조회하는 서브쿼리입니다.

2) user_data 로 부터 데이터를 조회 합니다.

with 좋은점

<리포트> 에서

로우데이터 → 정제 → 연, 월, 일 단위 집계 → 요약 데이터

빠르고 깔끔하게 요약할 수 있음

소감

설날이 끝난 후 수업이 있는 주 였다. 꽤나 정신없는 한 주를 보낼뻔 했지만 SQL 수업이라 다행이였다.
이번에 나온 개념에서 생소했던 점은 집합내용들과 서브쿼리였다.
이건 다시 한번 복습을 통해서 반복해야할 것 같다.

0개의 댓글