반응형
배운 것
Join ( Inner Join / Left Join )
Union
내용 정리
Join
- 테이블의 공통된 정보 (key값)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것
ㅇ Left Join
select * from point_users
left join users on point_users.user_id = users.user_id
👉 어떤 데이터는 모든 필드가 채워져있지만, 어떤 데이터는 비어있는 필드가 있다
꽉찬 데이터: 해당 데이터의 user_id 필드값이 point_users 테이블에 존재해서 연결한 경우
비어있는 데이터: 해당 데이터의 user_id 필드값이 point_users 테이블에 존재하지 않는 경우
Left Join은 어디에 → 뭐를 붙일건지, 순서가 중요!
ㅇ Inner Join
select * from users u
inner join point_users p on u.user_id = p.user_id;
👉 Left Join과는 다르게, 여기서는 비어있는 필드가 있는 데이터가 없다
그 이유는, 같은 user_id를 두 테이블에서 모두 가지고 있는 데이터만 출력했기 때문
ㅇ SQL쿼리가 실행되는 순서
select u.name, count(u.name) as count_name
from orders o
inner join users u on o.user_id = u.user_id
where u.email like '%naver.com'
group by u.name
👉 위 쿼리가 실행되는 순서: from → join → where → group by → select
Union
- 결과물을 합쳐서 한번에 모아서 보기
(
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
)
7월, 8월 데이터를 합침
느낀 점 / 보완할 점
재밌지만 조금씩 헷갈리는 부분들이 생기는 중
특히 Join을 좀 더 연습해봐야겠다
'아카이브 > SQL' 카테고리의 다른 글
스파르타 코딩클럽 [ 엑셀보다 쉬운 SQL ] - 회고 (1) | 2022.01.13 |
---|---|
스파르타 코딩클럽 [ 엑셀보다 쉬운 SQL ] - 4주차 (문법 정리) (0) | 2022.01.13 |
스파르타 코딩클럽 [ 엑셀보다 쉬운 SQL ] - 2주차 (0) | 2022.01.06 |
스파르타 코딩클럽 [ 엑셀보다 쉬운 SQL ] - 1주차 (0) | 2022.01.05 |