[개발일지] [왕초보] 엑셀보다 쉬운, SQL 3주차 개발일지
1. 학습 요약
- join을 이용하여 테이블을 연결할 수 있다.
- union을 이용하여 테이블을 연결할 수 있다.
- Quiz, 숙제 등을 통해 내용 점검하기
2. 노트 정리
1) Join 문법 이해하기
- Excel에서
vlookup
함수와 동일한 기능이다. - 기준(key)을 정하고 기준에 맞춰 테이블을 연결한다.
key: 연결할 테이블이 동시에 가지고 있는 필드 명 - 각 테이블의 별칭을 사용하면 편리하다.
INNER JOIN
- 두 테이블의 교집합
-- 테이블 명을 mytab1, mytab2라고 하고, key를 key_id라고 하자.
select * from mytab1 t1
inner join mytab2 t2 on t1.key_id = t2.key_id
LEFT JOIN
- 왼쪽 테이블에 맞춰서 테이블을 연결한다.
- 빈 칸은
NULL
로 표시된다.
-- 테이블 명을 mytab1, mytab2라고 하고, key를 key_id라고 하자.
select * from mytab1 t1
left join mytab2 t2 on t1.key_id = t2.key_id
2) union 문법 이해하기
- output이 같은 테이블의 데이터를 위 아래로 합칠 때 사용한다.
-- 테이블 명을 mytab1, mytab2라고 하고, key를 key_id라고 하자.
(
select '7월' as month, count(*) from mytab1 t1
)
union all
(
select '8월' as month, count(*) from mytab1 t1
)
4) 실습(Homework)
실습1. 웹개발, 앱개발 종합반의 week 별 체크인 수 세기
select c1.title, c2.week, count(*) as cnt from courses c1
inner join checkins c2 on c1.course_id = c2.course_id
group by c1.title, c2.week
order by c1.title, c2.week
실습2. 7월 10~19일에 가입한 고객 중 포인트를 가진 고객의 숫자, 전체 숫자, 비율 구하기
* `count`는 NULL이 아닌 행의 개수만 센다.
select count(pu.point_user_id) as pnt_user_cnt,
count(u.user_id) as tot_user_cnt,
round(count(pu.point_user_id)/count(u.user_id),2) as ratio
from users u
left join point_users pu on u.user_id = pu.user_id
where u.created_at between "2020-07-10" and "2020-07-20"
실습3. 1) `enrolled_id`별 수강완료(`done=1`)한 강의 갯수를 세어보고,
2) 완료한 강의 수가 많은 순서대로 정렬하기
3) `user_id`도 같이 출력되도록 한다.
select count(pu.point_user_id) as pnt_user_cnt,
count(u.user_id) as tot_user_cnt,
round(count(pu.point_user_id)/count(u.user_id),2) as ratio
from users u
left join point_users pu on u.user_id = pu.user_id
3. 느낀점
- 이번시간에는 혼자서 해결하는데 어려웠던 문제들이 있었다. 실습 예제들이 많아서 다행이다.
- group by와 order by에 필드를 여러 개 쓰는 것이 익숙하지 않았다.
- 코드가 길어지면서 이쁘게 정리하니 기분이 좋았다.
댓글남기기