18. 온보딩 SQL 1일차

코이그·2023년 3월 20일

항해99

목록 보기
17/54

스파르티코딩클럽 강의

1주차

select

select 쿼리문은 1) 어떤 테이블에서 2) 어떤 필드의 데이터를 가져올지로 구성됨.

table: 데이터가 담겨져 있는 표.
field: 테이블에서 열에 해당하는 가장 작은 단위의 데이터.

# 전체 테이블 추출
show tables

# orders 테이블의 전체 필드 추출
select * from orders

# orders 테이블의 특정 필드 추출
select order_no, created_at, user_id, email from orders

where 절

# orders 테이블에서 결제수단이 카카오페이인 데이터만 추출
select * from orders where payment_method = 'kakaopay'

# point_users 테이블에서 포인트가 5000점 이상인 데이터만 추출
select * from point_users where point >= 5000

# orders 테이블에서 주문한 강의가 앱개발 종합반이고 결제수단이 카드인 데이터만 추출
select * from orders where course_title = '앱개발 종합반' and payment_method = 'CARD'

# orders 테이블에서 생성된 날짜가 2020-07-13과 2020-07-15 사이인 데이터만 추출
# between: 날짜나 포인트 등
select * from orders where created_at between '2020-07-13' and '2020-07-15'

# checkins 테이블에서 주차가 (1, 3)와 일치하는 데이터만 추출
select * from checkins where week in (1, 3)

# users 테이블에서 이메일이 'daum.net'으로 끝나는 데이터만 추출
# like '%': 이 위치에 뭐가 있든 상관 없음
# ex) like 'a%t': a로 시작해서 t로 끝나는 데이터
select * from users where email like '%daum.net'
limit

일부 데이터만 추출.

# orders 테이블의 결제수단이 카카오페이인 데이터를 5개만 추출
select * from orders where payment_method = "kakaopay" limit 5;
distinct

중복 데이터 제외 후 추출

# 결제수단 종류 별 1개씩만 추출
select distinct(payment_method) from orders;
count

선택되 데이터의 갯수 추출

# orders 테이블의 결제수단이 카카오페이인 데이터의 갯수
select count(*) from orders where payment_method = 'kakaopay'

# distinct와 count 응용
# distinct로 중복을 제거한 데이터의 갯수 추출 (성씨가 몇개가 있는지)
select count(distinct(name)) from users

2주차

group by

범주의 통계를 내줌.

# users 테이블을 name을 기준으로 묶은 다음 name과 name으로 묶인 데이터의 갯수 추출
select name, count(*) from users group by name

# group by를 사용할 때 이런 식으로 먼저 쓴 다음에 나머지 디테일을 적는 것을 추천
select * from users
group by name

min / max / avg / sum

# checkins 테이블을 week를 기준으로 묶어서 week와 해당 week의 likes의 최솟값 추출
select week, min(likes) from checkins group by week

select week, max(likes) from checkins group by week

# 소수점을 설정하려면 round(avg(), 2) ==> 소수점 2자리까지만 출력
select week, avg(likes) from checkins group by week

select week, sum(likes) from checkins group by week

order by

# order by는 맨 마지막에 적용. 기본적으로 오름차순. 테이블에 출력이 되는 필드에 한해서 order by 가능
select name, count(*) from users group by name order by count(*)

# 내림차순은 마지막에 desc 옵션 추가
select name, count(*) from users group by name order by count(*) desc

# 무조건 group by 와 사용해야 하는 건 아니다
select * from checkins order by likes desc

# 실행 순서: from -> group by -> select -> order by
select name, count(*) from users
group by name
order by count(*)

where + group/order by

# 실행 순서: from -> where -> group by -> select -> order by
# orders 테이블에서 코스이름이 웹개발종합반인 데이터에 한해서 group by를 실행하고 원하는 데이터를 오름차순으로 추출
select payment_method, count(*) from orders
where course_title = '웹개발 종합반'
group by payment_method
order by count(*)

이외 유용한 문법

  • Alias: 별칭
# 1) orders의 별칭으로 o 설정. o.course_title -> orders 테이블에 있는 course_title 지정.
# 2) count의 별칭으로 cnt 설정
select payment_method, count(*) as cnt from orders o 
where o.course_title = '앱개발 종합반'
group by payment_method

쿼리 작성 꿀팁

  1. show tables로 어떤 테이블이 있는지 살펴보기
  2. 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리 날려보기
  3. 원하는 정보가 없다면 다른 테이블에도 2번 해보기
  4. 테이블을 찾았을 때 범주를 나눠서 보고싶은 필드 찾기
  5. 범주 별로 통계를 보고싶은 필드 찾기
  6. 쿼리 작성하기

숙제

  1. naver 이메일을 사용하면서, 웹개발 종합반을 신청했고, 결제는 kakaopay로 이뤄진 주문데이터 추출하기
select * from orders 
where email like '%naver.com' 
and course_title = '웹개발 종합반' 
and payment_method = 'kakaopay'
  1. naver 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단별 주문건수 세어보기
select payment_method, count(*) from orders
where course_title = '앱개발 종합반'
and email like '%naver.com'
group by payment_method
profile
COYG🔴⚪

0개의 댓글