SQL 아카아빙
SQL 문법 정리 아카이빙
shl4917
2023. 4. 6. 21:26
1주차 문법
수업목표
1. 데이터베이스 (DB) 와 SQL 왜 필요한가?
2. DB에서 데이터 가져오는 기초적인 문법인 Select 와 where 이해한다
3. 조금 더 복잡한 분석 위해 자주 사용하는 유용한 문법을 익힌다
- 일부 데이터만 가져오기 : Limit
- 중복 데이터 가져오기 : Distinct
숙제:
1) naver 이메일을 사용하면서
2) 웹개발 종합반을 신청했고
3) 결제는 kakaopay로 이뤄진 주문데이터 추출하기
답안 :
select * from orders
where email like '%naver.com'
and course_title = '앱개발 종합반'
and payment_method = 'kakaopay'
2주차 문법
수업목표
1. 동일한 범주의 데이터를 묶어서 통계를 내주는 Group by를 이해한다.
2. 출력하는 데이터를 필드의 값으로 정렬하여 출력하는 Order by를 익힌다.
3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
- from users: users 테이블 데이터 전체를 가져옵니다.
- group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐줍니다.
- select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어줍니다.
숙제:
1) 네이버 이메일을 사용하여
2) 앱개발 종합반을 신청한 주문의 결제수단별
3) 주문건수 세어보기
답변 :
select payment_method, count(*) from orders
where email like '%naver.com'
and course_title ='앱개발 종합반'
group by payment_method
3주차 강의
수업목표
1. 여러 테이블의 정보를 연결하는 Join을 이해한다.
2. 연결된 정보를 바탕으로 보다 풍부한 데이터분석을 연습한다.
3. 아래 위로 결과를 연결하는 Union을 공부한다.
- Join 이란?
- 두 테이블의 공통된 정보를 기준으로 테이블 연결해서 한 테이블처럼 보는 것을 의미
- ex) user_id 필드 기준으로 users 테이블과 orders 테이블을 연결해서 한 눈에 보기
- Join 종류 : Left Join, Inner Join
- Left Join : 유저 데이터로 Left Join 이해하기
- Inner Join : 유저 데이터로 Inner Join 이해하기
SQL 에서의 Inner 두 집합 사이의 관계 모형으로 형상화
숙제:
1) enrolled_id별 수강완료(done=1)한 강의 갯수를 세어보고,
2) 완료한 강의 수가 많은 순서대로 정렬해보기.
3) user_id도 같이 출력되어야 한다.
답변:
select e1.enrolled_id, e1.user_id, COUNT(*) as cnt from enrolleds e1
inner join enrolleds_detail e2 on e1.enrolled_id = e2.enrolled_id
where e2.done = 1
group by e1.enrolled_id, e1.user_id
order by cnt desc
4주차 강의
수업목표
1. Subquery(서브쿼리)의 사용 방법을 배워본다
2. 실전에서 유용한 SQL 문법을 더 배워본다
3. SQL을 사용하여 실전과 같은 데이터분석을 진행해본다
- Subquery 란?
- 하나의 SQL 쿼리 안에 또다른 SQL 쿼리가 있는 것을 의미합니다
- Where 에 들어가는 Subquery
- Where은 조건문이죠? Subquery의 결과를 조건에 활용하는 방식으로 유용하게 사용 가능하다
1) from 실행: users 데이터를 가져와줌
2) Subquery 실행: 해당되는 user_id의 명단을 뽑아줌
3) where .. in 절에서 subquery의 결과에 해당되는 'user_id의 명단' 조건으로 필터링 해줌
4) 조건에 맞는 결과 출력
SQL 문법 사용하기
* 문자열 데이터 다뤄보기
ex) 이메일 주소에서 @ 앞의 아이디만 가져오고 싶을 경우
▶ SUBSTRING_INDEX 라는 문법 사용
select user_id, email, SUBSTRING_INDEX(email, '@', 1) from users
* 문자열 일부만 출력하기
ex) orders 테이블에서 created_at을 날짜까지만 출력하게 해봅시다!
▶ SUBSTRING_라는 문법 사용
select order_no, created_at, substring(created_at,1,10) as date from orders
* CASE: 경우에 따라 원하는 값을 새 필드에 출력해보기
ex) 10000점보다 높은 포인트를 가지고 있으면 '잘 하고 있어요!', 평균보다 낮으면 '조금 더 달려주세요!' 라고 표시해 주려면 어떻게 해야할까요?
▶ case 뿐 아니라 when / then / else / end as 복합적으로 사용
select pu.point_user_id, pu.point,
case
when pu.point > 10000 then '잘 하고 있어요!'
else '조금 더 달려주세요!' END as '구분'
from point_users pu;