[오늘의 꿀팁!]
한 테이블에 모든 정보를 담을 수도 있겠지만, 불필요하게 테이블의 크기가 커져 불편해집니다. 그래서, 데이터를 종류별로 쪼개 다른 테이블에 담아놓고 연결이 필요한 경우 연결할 수 있도록 만들어놓습니다.
예를 들면, users와 checkins 테이블에 동시에 존재하는 user_id 처럼요. 이런 필드를 두 테이블을 연결시켜주는 열쇠라는 의미로 'key'라고 부릅니다.
👉 Join이란? 두 테이블의 공통된 정보 (key값)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것을 의미해요.
예) user_id 필드를 기준으로 users 테이블과 orders 테이블을 연결해서 한 눈에 보고 싶어요!
👉 위의 예시와 같이, 두 테이블의 정보를 연결해서 함께 보고싶을 때가 있겠죠?
그럴 때를 대비해서 무언가 연결된 정보가 있을 때, user_id 처럼 동일한 이름과 정보가 담긴 필드를 두 테이블에 똑같이 담아놓는답니다. 이런 필드를 두 테이블을 연결시켜주는 열쇠라는 의미로 'key'라고 불러요.
[오늘의 꿀팁!] 혹시 엑셀을 잘 쓰신다면? SQL의 Join은 엑셀의 vlookup과 동일하다고 생각하시면 됩니다 :-)
SELECT * FROM users u
left join point_users p on u.user_id = p.user_id
SELECT * FROM users u
inner join point_users p on u.user_id = p.user_id
-
- Join의 종류: Left Join, Inner Join
- Left Join: 유저 데이터로 Left Join 이해해보기
- 👉 앗! 어디서 많이 본 그림 아닌가요?
- 생각하는 그 그림이 맞아요! SQL에서의 Join은 두 집합 사이의 관계와 같답니다.
- 여기서 A와 B는 각각의 테이블을 의미합니다. 둘 사이의 겹치는 부분은, 뭔가 테이블 A와 B의 key 값이 연결되는 부분일 것 같지 않나요?
select * from users u
left join point_users p
on u.user_id = p.user_id;
- 👉 어떤 데이터는 모든 필드가 채워져있지만, 어떤 데이터는 비어있는 필드가 있습니다.
- 비어있는 데이터의 경우, 회원이지만 수강을 등록/시작하지 않아 포인트를 획득하지 않은 회원인 경우에요
-
- 꽉찬 데이터: 해당 데이터의 user_id 필드값이 point_users 테이블에 존재해서 연결한 경우 비어있는 데이터: 해당 데이터의 user_id 필드값이 point_users 테이블에 존재하지 않는 경우
- Inner Join: 유저 데이터로 Inner Join 이해해보기
- 여기서 A와 B는 각각의 테이블을 의미합니다. 이 그림은 뭔가, 두 테이블의 교집합을 이야기하고 있는 것 같지 않나요?
- 👉 이것도 어디서 많이 본 그림이에요!
SELECT u.name, count(u.name)as count_name FROM orders o
inner join users u on o.user_id =u.user_id
where o.email LIKE '%naver.com'
group by u.name
select c1.title, c2.week, count(*) as cnt from courses c1
inner join checkins c2 on c1.course_id = c2.course_id
inner join orders o on c2.user_id = o.user_id
where o.created_at >= '2020-08-01'
group by c1.title, c2.week
order by c1.title, c2.week
숙제: enrolled_id별 수강완료(done=1)한 강의 갯수를 세어보고, 완료한 강의 수가 많은 순서대로 정렬해보기. user_id도 같이 출력되어야 한다.
select e.enrolled_id,
e.user_id,
count(*) as cnt
from enrolleds e
inner join enrolleds_detail ed on e.enrolled_id = ed.enrolled_id
where ed.done = 1
group by e.enrolled_id, e.user_id
order by cnt desc
강의 자료 : https://teamsparta.notion.site/SQL-3-aa8926f687e44a38a499fe03b0166dc1
[스파르타코딩클럽] 엑셀보다 쉬운 SQL - 3주차
매 주차 강의자료 시작에 PDF파일을 올려두었어요!
teamsparta.notion.site
'항해99 > 엑셀보다 쉬운 SQL' 카테고리의 다른 글
엑셀보다 쉬운 SQL - 4주차 (0) | 2022.11.29 |
---|---|
엑셀보다 쉬운 SQL -2주차 (0) | 2022.11.21 |
엑셀보다 쉬운 SQL -1주차 (0) | 2022.11.17 |