select 쿼리문은 1) 어떤 테이블에서 2) 어떤 필드의 데이터를 가져올지로 구성됨.
table: 데이터가 담겨져 있는 표.
field: 테이블에서 열에 해당하는 가장 작은 단위의 데이터.
# 전체 테이블 추출
show tables
# orders 테이블의 전체 필드 추출
select * from orders
# orders 테이블의 특정 필드 추출
select order_no, created_at, user_id, email from orders
# 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'
일부 데이터만 추출.
# orders 테이블의 결제수단이 카카오페이인 데이터를 5개만 추출
select * from orders where payment_method = "kakaopay" limit 5;
중복 데이터 제외 후 추출
# 결제수단 종류 별 1개씩만 추출
select distinct(payment_method) from orders;
선택되 데이터의 갯수 추출
# orders 테이블의 결제수단이 카카오페이인 데이터의 갯수
select count(*) from orders where payment_method = 'kakaopay'
# distinct와 count 응용
# distinct로 중복을 제거한 데이터의 갯수 추출 (성씨가 몇개가 있는지)
select count(distinct(name)) from users
범주의 통계를 내줌.
# users 테이블을 name을 기준으로 묶은 다음 name과 name으로 묶인 데이터의 갯수 추출
select name, count(*) from users group by name
# group by를 사용할 때 이런 식으로 먼저 쓴 다음에 나머지 디테일을 적는 것을 추천
select * from users
group by name
# 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 가능
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(*)
# 실행 순서: 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(*)
# 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
select * from orders
where email like '%naver.com'
and course_title = '웹개발 종합반'
and payment_method = 'kakaopay'
select payment_method, count(*) from orders
where course_title = '앱개발 종합반'
and email like '%naver.com'
group by payment_method