01. 오늘 배울 것
Join : 여러 정보를 한 눈에 보고 싶다면
오늘의 미션!
'오늘의 다짐' 이벤트 당첨자를 선정하여 스타벅스 기프티콘을 지급해야 해요.
우선, 배운 내용을 사용해서 '오늘의 다짐' 테이블을 불러와 볼까요?
*오늘의 다짐 이벤트: 오늘의 다짐을 남겨준 10명 추첨해서 기프티콘 지급하는 이벤트.
>> 기존 방식대로 하면 users 테이블 보고, checkins 테이블 따로 봐야함
[오늘의 꿀팁!]
한 테이블에 모든 정보를 담을 수도 있겠지만, 불필요하게 테이블의 크기가 커져 불편해집니다.
그래서, 데이터를 종류별로 쪼개 다른 테이블에 담아놓고 연결이 필요한 경우 연결할 수 있도록 만들어놓습니다.
예를 들면, users와 checkins 테이블에 동시에 존재하는 user_id 처럼요.
이런 필드를 두 테이블을 연결시켜주는 열쇠라는 의미로 'key'라고 부릅니다.
02. 여러 테이블을 연결해보자: Join 이란?
Join이란?
두 테이블의 공통된 정보 (key값)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것을 의미해요.
예) user_id 필드를 기준으로 users 테이블과 orders 테이블을 연결해서 한 눈에 보고 싶어요!
SQL의 Join은 엑셀의 vlookup과 동일하다고 생각하시면 됩니다 :-)
Join의 종류: Left Join, Inner Join
어떤 데이터는 모든 필드가 채워져있지만, 어떤 데이터는 비어있는 필드가 있습니다.
꽉찬 데이터: 해당 데이터의 user_id 필드값이 point_users 테이블에 존재해서 연결한 경우
비어있는 데이터: 해당 데이터의 user_id 필드값이 point_users 테이블에 존재하지 않는 경우
(비어있는 데이터의 경우, 회원이지만 수강을 등록/시작하지 않아 포인트를 획득하지 않은 회원인 경우)
여기서는 비어있는 필드가 있는 데이터가 없어요!
그 이유는, 같은 user_id를 두 테이블에서 모두 가지고 있는 데이터만 출력했기 때문이에요.
Join 함께 연습해보기
위 쿼리가 실행되는 순서: from → join → select
- from enrolleds : enrolleds 테이블 데이터 전체를 가져옵니다.
- inner join courses on e.course_id = c.course_id: courses를 enrolleds 테이블에 붙이는데, enrolleds 테이블의 course_id와 동일한 course_id를 갖는 courses의 테이블을 붙입니다.
- select * : 붙여진 모든 데이터를 출력합니다.
👉 항상 from에 들어간 테이블을 기준으로, 다른 테이블이 붙는다고 생각하면 편합니다!
배웠던 문법 Join과 함께 연습해보기
checkins 테이블에 courses 테이블 연결해서 통계치 내보기
point_users 테이블에 users 테이블 연결해서 순서대로 정렬해보기
orders 테이블에 users 테이블 연결해서 통계치 내보기
위 쿼리가 실행되는 순서: from → join → where → group by → select
- from orders o: orders 테이블 데이터 전체를 가져오고 o라는 별칭을 붙입니다.
- inner join users u on o.user_id = u.user_id : users 테이블을 orders 테이블에 붙이는데, orders 테이블의 user_id와 동일한 user_id를 갖는 users 테이블 데이터를 붙입니다. (*users 테이블에 u라는 별칭을 붙입니다)
- where u.email like '%naver.com': users 테이블 email 필드값이 naver.com으로 끝나는 값만 가져옵니다.
- group by u.name: users 테이블의 name값이 같은 값들을 뭉쳐줍니다.
- select u.name, count(u.name) as count_name : users 테이블의 name필드와 name 필드를 기준으로 뭉쳐진 갯수를 세어서 출력해줍니다.
03. 이제는 실전! 본격 쿼리 작성해보기
[퀴즈] Join 연습1
결제 수단 별 유저 포인트의 평균값 구해보기 (어느 결제수단이 가장 열심히 듣고 있나~)
[퀴즈] Join 연습2
결제하고 시작하지 않은 유저들을 성씨별로 세어보기 (어느 성이 가장 시작을 안하였는가~)
[퀴즈] Join 연습3
과목 별로 시작하지 않은 유저들을 세어보기
'내배단_SQL' 카테고리의 다른 글
SQL 문법 총정리 (0) | 2022.04.17 |
---|---|
내배단 SQL 4주차 개발일지 (0) | 2022.04.17 |
내배단 SQL 2주차 개발일지 (0) | 2022.04.13 |
내배단 SQL 1주차 개발일지 (0) | 2022.04.13 |