스파르타 코딩 클럽 SQL반 3주차 리뷰

Justin. S. Hong·2023년 1월 20일
0

스파르타코딩클럽

목록 보기
10/11

Keyword : inner join, left join

숙제 1번
enrolled_id별 수강완료(done=1)한 강의 갯수를 세어보고, 완료한 강의 수가 많은 순서대로 정렬하시오. (이 때 user_id도 같이 출력되어야 하며, 결과는 아래 그림과 같이 나와야 함!!!)
출력 결과

select e.enrolled_id, e.user_id, count(*) as max_count from enrolleds
left join enrolleds_detail on enrolleds.enrolled_id = enrolleds_detail.enrolled_id
where enrolleds_detail.done = 1
group by enrolleds.enrolled_id, enrolleds.user_id 
order by max_count desc

구문 실행 순서
1. from enrolleds -> enrolleds 테이블 내용 전체 검색
2. on enrolleds.enrolled_id = enrolleds_detail.enrolled_id -> enrolleds 및 enrolleds_detail 테이블이 가지고 있는 공통 속성인 enrolled_id를 기준으로 설정한다.
3. left join enrolleds_detail -> enrolleds 테이블과 enrolleds_detail과 겹치는 부분이 있으면 그 부분에 대한 값을 가져오고 겹치지 않는 부분은 전부 NULL로 가져온다.
4. where enrolleds_detail.done = 1 -> enrolleds_detail 테이블에서 수강 완료했음을 의미하는 done 속성이 1인 데이터 즉, 수강 완료한 사용자에 대한 데이터를 뽑아온다.
5. group by enrolleds.enrolled_id, enrolleds.user_id -> enrolled_id 및 user_id를 기준으로 정렬한다.
6. select e.enrolled_id, e.user_id, count( * ) as max_count -> enrolled_id, user_id 및 전체 데이터를 계수한 데이터의 수만 선택한다.
7. order by max_count desc -> 계수한 데이터의 수를 기준으로 내림차순 정렬한다.

P. S : inner join은 null 값이 들어간 데이터는 안보여주지만 left join이나 right join은 null 값이 들어간 데이터를 보여준다. 다만 강사님 曰, right join은 별로 안쓴다고 한다.

profile
KOSA -> 오즈코딩스쿨을 거쳐 프론트엔드 개발자로 성장하기 ESTJ-1W2

0개의 댓글