본문 바로가기

내배단_SQL

내배단 SQL 3주차 개발일지

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

Left join

어떤 데이터는 모든 필드가 채워져있지만, 어떤 데이터는 비어있는 필드가 있습니다.

꽉찬 데이터: 해당 데이터의 user_id 필드값이 point_users 테이블에 존재해서 연결한 경우

비어있는 데이터: 해당 데이터의 user_id 필드값이 point_users 테이블에 존재하지 않는 경우

(비어있는 데이터의 경우, 회원이지만 수강을 등록/시작하지 않아 포인트를 획득하지 않은 회원인 경우)

 

 

Inner Join (교집합)

여기서는 비어있는 필드가 있는 데이터가 없어요!

그 이유는, 같은 user_id를 두 테이블에서 모두 가지고 있는 데이터만 출력했기 때문이에요.

 

Join 함께 연습해보기

[실습] orders 테이블에 users 테이블 연결해보기
[실습] checkins 테이블에 users 테이블 연결해보기
[실습] enrolleds 테이블에 courses 테이블 연결해보기

위 쿼리가 실행되는 순서: from → join → select

 

  1. from enrolleds : enrolleds 테이블 데이터 전체를 가져옵니다.
  2. inner join courses on e.course_id = c.course_id: courses를 enrolleds 테이블에 붙이는데, enrolleds 테이블의 course_id와 동일한 course_id를 갖는 courses의 테이블을 붙입니다.
  3. select * : 붙여진 모든 데이터를 출력합니다.

 👉 항상 from에 들어간 테이블을 기준으로, 다른 테이블이 붙는다고 생각하면 편합니다!

 

 

배웠던 문법 Join과 함께 연습해보기

checkins 테이블에 courses 테이블 연결해서 통계치 내보기

'오늘의 다짐' 정보에 과목 정보를 연결해 과목별 '오늘의 다짐' 갯수를 세어보자!

point_users 테이블에 users 테이블 연결해서 순서대로 정렬해보기

많은 포인트를 얻은 순서대로 유저 데이터 정렬해서 보기

orders 테이블에 users 테이블 연결해서 통계치 내보기

네이버 이메일 사용하는 유저의 성씨별 주문건수 세어보기

위 쿼리가 실행되는 순서: from → join → where → group by → select

 

  1. from orders o: orders 테이블 데이터 전체를 가져오고 o라는 별칭을 붙입니다.
  2. inner join users u on o.user_id = u.user_id : users 테이블을 orders 테이블에 붙이는데, orders 테이블의 user_id와 동일한 user_id를 갖는 users 테이블 데이터를 붙입니다. (*users 테이블에 u라는 별칭을 붙입니다)
  3. where u.email like '%naver.com': users 테이블 email 필드값이 naver.com으로 끝나는 값만 가져옵니다.
  4. group by u.name: users 테이블의 name값이 같은 값들을 뭉쳐줍니다.
  5. select u.name, count(u.name) as count_name : users 테이블의 name필드와 name 필드를 기준으로 뭉쳐진 갯수를 세어서 출력해줍니다.

03. 이제는 실전! 본격 쿼리 작성해보기

[퀴즈] Join 연습1

결제 수단 별 유저 포인트의 평균값 구해보기 (어느 결제수단이 가장 열심히 듣고 있나~) 

join 할 테이블: point_users 에, orders 를 붙이기

[퀴즈] Join 연습2

결제하고 시작하지 않은 유저들을 성씨별로 세어보기 (어느 성이 가장 시작을 안하였는가~)

join 할 테이블: enrolleds 에, users 를 붙이기

[퀴즈] Join 연습3

과목 별로 시작하지 않은 유저들을 세어보기

join 할 테이블: courses 에, enrolleds 를 붙이기

 

'내배단_SQL' 카테고리의 다른 글

SQL 문법 총정리  (0) 2022.04.17
내배단 SQL 4주차 개발일지  (0) 2022.04.17
내배단 SQL 2주차 개발일지  (0) 2022.04.13
내배단 SQL 1주차 개발일지  (0) 2022.04.13