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에 필드를 여러 개 쓰는 것이 익숙하지 않았다.
  • 코드가 길어지면서 이쁘게 정리하니 기분이 좋았다.

댓글남기기