반응형
감기 걸려서 골골거리면서 듣는 중ㅜ_ㅜ
3주차 되니까 내용이 복잡해져서 강의노트 쓰려니 살짝 막막하다 ㅎ
사실 미루고 미루다가 수업들은지 일주일 뒤에 쓰는 강의노트이다 ㅎ
할 수 있다,, 아자,,
<목표별 강의노트>
1. 여러 테이블의 정보를 연결하는 Join을 이해한다.
1) Join의 기능
Join은 Table을 연결해주는 역할을 한다!
Table에 공통으로 존재하는 필드값을 Key값 이라고 부르는데,
이 Key값을 기준으로 Table을 연결하는 것!
*(예시) 'users' Table과 'point_users' Table을 Key값인 user_id로 연결하기
select * from point_users pu
left join users u on pu.user_id = u.user_id
❔왜 정보들을 처음부터 한 Table에 담지 않은걸까.
한 Table에 모든 정보를 담기에는,, 불필요하게 Table의 크기가 커져 불편하기 때문이다.
그러므로 쪼개서 담아놓고 필요할 때 연결해서 쓰는 것.
2) Join의 종류(1) : Left Join
집합 관계를 통해 Left Join 이해하기
A 테이블을 기준으로, B 테이블의 필드 값을 갖다 붙이는 것.
Key 값 또한 A 테이블이 기준이 됨. (Key값의 이름은 동일하더라도, 필드 값이 다를 수 있다.)
⇒ 이 경우에는 B에 존재하지 않는 필드 값이 있을 수 있음.
존재하지 않을 경우 [NULL] 이라고 표기됨.
※ 그러므로, left join은 어디에 → 뭐를 붙일건지, 순서가 중요 하다!
*(예시) users 테이블을 기준으로, point_users 테이블 붙이기.
select * from users u left join point_users p on u.user_id = p.user_id;
users의 user_id (key값) 기준으로 point_users의 필드 값을 갖다 붙임.
3) Join의 종류(2) : 교집합을 이루는 Inner Join
Key값을 기준으로, A와 B 테이블 모두 중복되는 필드 값만 갖다 붙이는 것.
*(예시) users 테이블을 기준으로, point_users 테이블 붙이기.
select * from users u inner join point_users p on u.user_id = p.user_id;
2. 아래 위로 결과를 연결하는 Union을 공부한다.
Union의 기능
동일한 필드를 가진 데이터 값을 한 번에 보고싶은 경우!
*(예시) 7월과 8월 강의 주차별 유저 현황
(
select '7월' as month, c.title, c2.week, count(*) as cnt from checkins c2
inner join courses c on c2.course_id = c.course_id
inner join orders o on o.user_id = c2.user_id
where o.created_at < '2020-08-01'
group by c2.course_id, c2.week
order by c2.course_id, c2.week
)
union all
( select '8월' as month, c.title, c2.week, count(*) as cnt from checkins c2
inner join courses c on c2.course_id = c.course_id
inner join orders o on o.user_id = c2.user_id
where o.created_at >= '2020-08-01'
group by c2.course_id, c2.week
order by c2.course_id, c2.week
)
오늘 체력 끝...
체력있을 때 추가로 정리하는걸로...
반응형
'스터디 > SQLD' 카테고리의 다른 글
[SQL] 문법 총정리 - 스파르타 코딩클럽 (0) | 2023.04.08 |
---|---|
[SQL] 2주차 강의노트 - 스파르타 코딩클럽 (0) | 2023.03.19 |
[SQL] 1주차 강의노트 - 스파르타 코딩클럽 (0) | 2023.03.18 |