Join이란? 두 테이블의 공통된 정보 (key값)를 기준으로
테이블을 연결해서 한 테이블처럼 보는 것을 의미한다.
ex) user_id 필드를 기준으로 users 테이블과 orders 테이블을 연결해서 한 눈에 보기!
Foreign Key 로 이어져있는 관계의 테이블들을 연결해준다.
Join 에는 Left Join / Inner Join / Outer Join / Self Join
의 종류가 있는데, 이번에 배우게 될 내용은 Left Join / Inner Join이다. ( => Outer Join은 현업에서 그리 많이 쓰지 않는다고 한다 )
[ Left Join ]
- Left Join 은, 조인을 하는 주체인 테이블의 데이터와, 다른 테이블의 참조 데이터를 가져와서 다 뿌려주는 것을 의미한다.
select * from users u
left join point_users pu on u.user_id = pu.user_id
- users 테이블에서, user_id를 기준으로 point_users 테이블을 조인해준다.
- 이 때 조인 방식은 left join.
결과는
NULL 값은,
=========================
[ 과목별 오늘의 다짐 갯수 세어보기 Query ]
select ch.course_id, c.title , count(*) as 다짐 from checkins ch
inner join courses c on ch.course_id = c.course_id
group by ch.course_id
SQL문이 실행되는 순서
: from -> inner join -> group by -> select
[ 많은 포인트를 얻은 순서대로 유저 데이터 정렬해서 보기 ]
select u.name, u.email , pu.`point` from point_users pu
inner join users u on pu.user_id = u.user_id
order by pu.`point` desc
[ 주문 정보에 유저 정보를 연결해서,
네이버 이메일을 사용하는 유저 중 성씨별 주문건수 ]
select u.name, count(*) as 주문건수 from users u
inner join orders o on u.user_id = o.user_id
where u.email like "%naver.com"
group by u.name
order by 주문건수 desc
SQL문이 실행되는 순서
: from -> join -> where -> group by -> select -> order by
: 참고자료) https://jaehoney.tistory.com/191
SQL - SELECT 쿼리 실행 순서 정리!
SELECT 쿼리 실행 순서 SQL 쿼리문을 실행하는데 순서가 존재한다. 알고 있는데 자꾸 깜빡해서 정리를 한다. SELECT 쿼리문은 FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY 총 6단계를 거친다. 아래는 각 단계
jaehoney.tistory.com
-- 결제수단별 유저 포인트의 평균값 구해보기.
select o.payment_method, round(avg(pu.`point`)) as avrPoint from orders o
inner join point_users pu on o.user_id = pu.user_id
group by o.payment_method
-- 결제하고 시작하지 않은 유저들을 성씨별로 세어보기
select name, count(*) as cnt from users u
inner join enrolleds e on u.user_id = e.user_id
where e.is_registered = 0
group by name
order by cnt desc
-- 과목 별로 시작하지 않은 유저들을 세어보기
select c.course_id, c.title, count(*) as cnt from courses c
inner join enrolleds e on c.course_id = e.course_id
where e.is_registered = 0
group by c.course_id