본문 바로가기
아카이브/SQL

스파르타 코딩클럽 [ 엑셀보다 쉬운 SQL ] - 3주차

by nineteen 2022. 1. 10.
반응형

배운 것

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은 첫번째 원에 붙이는 것

 

Left Join은 어디에 → 뭐를 붙일건지, 순서가 중요!

 

 

Inner Join

select * from users u
inner join point_users p on u.user_id = p.user_id;

👉 Left Join과는 다르게, 여기서는 비어있는 필드가 있는 데이터가 없다

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

 

 

Inner Join은 교집합

 

 

 

ㅇ 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을 좀 더 연습해봐야겠다