한 테이블에 모든 정보 한꺼번에 담으면 되지 왜 굳이 따로 정리해둬 ?
-> 불필요하게 테이블의 크기가 커짐. 데이터를 종류별로 쪼개서 관리하고 기준이 되는 key와 Join을 통해 연결해서 읽어오는게 효율적임.
Join
두 테이블에 공통된 정보(key값)을 기준으로 테이블을 연결해서 한 테이블처럼 보이게 만드는 것
left join - 왼쪽에 있는 테이블을 기준으로 다른 테이블 데이터를 붙임. 따라서 '어디에&무엇을 붙일지' 순서가 매우 중요!
user_id를 key값으로 해서 users 테이블에 point_users 테이블 데이터를 붙임.
null : 아직 수강을 시작하지 않는 등의 이유로 point가 쌓이지 않은 user라서 null 값으로 표시됨.
inner join
user_id를 key값으로 해서 users 테이블에 point_users 테이블 데이터를 붙임.
이 때, 두 테이블에서 모두 데이터를 갖고 있는 데이터만 출력함 -> 교집합처럼! (null값이 없음)
inner join 익숙해지기
- [실습] orders 테이블에 users 테이블 연결해보기 (inner join으로)
- [실습] checkins 테이블에 users 테이블 연결해보기 (inner join으로)
- [실습] enrolleds 테이블에 courses 테이블 연결해보기 (inner join으로)
inner join이랑 다른 쿼리문 함께 써보기
일단 join한 후에는 하나의 테이블이라 생각하고 거기서 새로운 쿼리문 추가하면 됨!
- checkins 테이블에 courses 테이블 연결해서 통계치 내보기 - 과목별 오늘의 다짐 갯수 세어보기
- point_users 테이블에 users 테이블 연결해서 순서대로 정렬해보기 - 많은 포인트를 얻은 순서대로 유저 데이터 정렬해서 보기
- orders 테이블에 users 테이블 연결해서 통계치 내보기 - 네이버 이메일 사용하는 유저의 성씨별 주문건수 세어보기
- [퀴즈] Join 연습1 - 결제 수단 별 유저 포인트의 평균값 구해보기
- [퀴즈] Join 연습2 - 결제하고 시작하지 않은 유저들을 성씨별로 세어보기
- [퀴즈] Join 연습3 - 과목 별로 시작하지 않은 유저들을 세어보기
- [퀴즈] Join 연습4 - 웹개발, 앱개발 종합반의 week 별 체크인 수를 세어볼까요? 보기 좋게 정리해보기!
- [퀴즈] Join 연습5 - 연습4번에서, 8월 1일 이후에 구매한 고객들만 발라내어 보세요!
left join 익숙해지기
한 쪽에는 데이터가 없고 한 쪽에는 데이터가 있는데 통계치를 내고 싶을 때 쓰임!
아직 point 없는 user만 골라보기 -> where절로 골라내는데 이때 null은 대문자 NULL로.
수업 시작한, 즉 point가 발생한 user만 골라보기 -> in not NULL
- [퀴즈] 7월10일 ~ 7월19일에 가입한 고객 중, 포인트를 가진 고객의 숫자, 그리고 전체 숫자, 그리고 비율을 보고 싶어요!
💡count는 NULL을 세지 않는다
union
select를 두번하는 방법 대신, 한번에 모아서 볼 때! (필드명이 같아야 함)
💡 union 을 사용하면 내부 정렬 안 먹힘. 그래서 사실 order by 지워도 결과는 변함없음. 이거 해결하는 법은 다음주차에 배움!
[숙제] enrolled_id별 수강완료(done=1)한 강의 갯수를 세어보고, 완료한 강의 수가 많은 순서대로 정렬해보기.
user_id도 같이 출력되어야 한다.
'스파르타 > SQL' 카테고리의 다른 글
220312. 엑셀보다 쉬운 SQL 4주차 - Subquery, with절, 유용한 SQL문법(문자열, Case) (0) | 2022.03.12 |
---|---|
220304. 엑셀보다 쉬운 SQL 2주차 - Group by, Order by (0) | 2022.03.04 |
220303. 엑셀보다 쉬운 SQL 1주차 - Select, Where 쿼리문 (0) | 2022.03.03 |