3주차에는 데이터를 연결하고 더 복잡한 쿼리를 사용해 데이터를 찾는 능력을 키우는 수업이었다.
데이터를 연결하는 방법은 join코드를 이용해 서로 다른 테이블을 공통된 Key값을 이용해 연결해 하나의 테이블 처럼 보이게한다.
join은 이해 했지만 쿼리가 점점 복잡해지니 조금 헷갈렸던것 같기도 하다.
1. Inner Join
inner join은 쉽게 설명하면 교집합을 의미한다.
연결하는 양쪽 테이블에 모두 가지고 있는 데이터만 출력한다. 즉 비어있는 데이터(NULL)는 출력되지 않는다.
위는 inner join을 알기쉽게 사진으로 설명한 것
inner join 코드↓↓↓
select * from users u
inner join point_users p
on u.user_id = p.user_id;
1. Left Join
left join은 기준이 되는 테이블에 합쳐진다. 비어있는 데이터(NULL)들도 모두 출력된다.
위는 left join을 알기쉽게 사진으로 설명한 것
left join 코드↓↓↓
select * from users u
left join point_users p
on u.user_id = p.user_id;
참고로 위에 보이는 코드들의 실행순서는
순서: from → join → select 순으로 실행된다.
1. Union all
union은 보고싶은 데이터들을 위아래로 붙여서 볼 수 있게 만들어주는 시스템이다.
union all 코드는 아래와 같다.
(
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
) # 1번코드
union all #1번과 2번 코드를 붙여준다
(
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
) # 2번 코드
생각보다 간단했다.
여기서 정렬은 데이터를 붙여준 뒤에 해야하는데 그 부분은 sub query로 4주차에 수업한다.