SQL 아카아빙

SQL 문법 정리 아카이빙

shl4917 2023. 4. 6. 21:26
1주차 문법 
수업목표 
1. 데이터베이스 (DB) 와 SQL 왜 필요한가?
2. DB에서 데이터 가져오는 기초적인 문법인 Select 와 where 이해한다
3. 조금 더 복잡한 분석 위해 자주 사용하는 유용한 문법을 익힌다

 

 

Select 와 where 예시 : orders 테이블 (DB) 에서 카카오페이로 결제한 데이터만 추출

  • 일부 데이터만 가져오기 : Limit

'Limit' 사용하여 데이터 5개만 출력할 경우 예시

  • 중복 데이터 가져오기 : Distinct

'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. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.

group  by 동일한 범주 갖는 데이터 하나로 묶어서 통계를 내주는 기능

  1. from users: users 테이블 데이터 전체를 가져옵니다.
  2. group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐줍니다.
  3. select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어줍니다.

order by 사용하여 like 받은 순서대로 데이터 추출하기

숙제: 
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 이해하기

SQL 에서의 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 쿼리가 있는 것을 의미합니다

Subquery (서브쿼리) 적용한 예시

 

  • 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;