✏️ 테이블 연결
🔎 Join
두 테이블의 공통된 정보( key 값)을 기준으로 테이블을 연결해 한 테이블처럼 보이게 하는 것
🔎 Left Join
SELECT * FROM users u
left join point_users pu
on u.user_id = pu.user_id
users 테이블과 point_users테이블이 겹치는 부분과
users테이블 겹치는 부분 모두 가져옴.
🔎 Inner Join
SELECT * FROM orders o
inner join users u
on o.user_id = u.user_id
교집합
orders 테이블과 users테이블이 겹치는 부분만 가져옴.
✏️쿼리 진행 순서 : from → join → where → group by → select
select u.name, COUNT(*) as cnt FROM orders o
inner join users u
on o.user_id = u.user_id
WHERE o.email LIKE '%naver.com'
GROUP BY u.name
select u.name, COUNT(*) as cnt_name FROM enrolleds e
inner join users u
on e.user_id = u.user_id
where e.is_registered = 0
GROUP BY u.name
order by cnt_name desc
결제하고 시작하지 않은 유저들을 성씨별로 세어보기
select c.title, c2.week, COUNT(*) as cnt
FROM courses c
inner join checkins c2 on c.course_id = c2.course_id
inner join orders o on c2.user_id = o.user_id
WHERE o.created_at >= '2020-08-01'
GROUP by c.title, c2.week
ORDER by c.title, c2.week
group by와 order by는 위와 같이 쓸 수 있다.
앞에 언급한 c.title열이 c2.week보다 우선순위가 높다.
select u.name, COUNT(*) as cnt FROM users u
left join point_users pu on u.user_id =pu.user_id
where pu.point_user_id is NOT NULL
GROUP BY u.name
join을 하다보면 NULL값이 생길 수 있다.
이때 NULL값을 제외하고 싶다면 IS NOT NULL이라고 써주면 된다.
🔎 Union
원하는 값을 추출한 두 테이블을 한번에 모아서 보고 싶을 경우, Union을 사용한다.
중복을 허용하지 않는다. 합집합
🔎 Union ALL
중복을 허용한다.
(
select '7월' as month, c1.title, c2.week, count(*) as cnt from courses c1
inner join checkins c2 on c1.course_id = c2.course_id
inner join orders o on c2.user_id = o.user_id
where o.created_at >= '2020-08-01'
group by c1.title, c2.week
order by c1.title, c2.week
)
UNION all
(
select '8월' as month, c1.title, c2.week, count(*) as cnt from courses c1
inner join checkins c2 on c1.course_id = c2.course_id
inner join orders o on c2.user_id = o.user_id
where o.created_at >= '2020-08-01'
group by c1.title, c2.week
order by c1.title, c2.week
)
🍏 KEEP, 습관 중요한 것
JOIN 및 UNION을 활용해 테이블이 범주가 넓어지면서 원하는 데이터를 추출하기 쉬워졌다.
그리고 테이블이 커져 직관적으로 개념을 익히기 힘들었다.
UNION과 UNION ALL의 차이점이 은근히 헷갈린다.
🍎 PROBLEM, 이슈, 에러, 오류
from → join → where → group by → select
쿼리 진행 속도가 중요.
이 순서를 지키지 않으면 오류 발생한다.
또한, JOIN문을 활용하면 테이블 별칭을 활용하는게 많아졌다.
헷갈리지 않게 조심해야겠다.
🍉 TRY 시도
퀴즈 푸는 난이도가 초반에 비해 조금 어렵게 느껴졌다.
조건이 많아지면서 슬슬 복잡해지는 느낌!
그래도 결과값과 유사하게 추출하려고 노력하니 어찌어찌 된다.
이때 가장 뿌듯하다.
합집합, 교집합, UNION ALL 개념을 좀 더 명확하게 이해하고자 노력해야겠다.
'SQL 개발일지' 카테고리의 다른 글
[웹개발 종합반 2주차] 서버와 통신하기 Ajax (2) | 2022.10.21 |
---|---|
👩💻[내일배움단] 엑셀보다 쉬운 SQL 18회차 (2) | 2022.07.14 |
👩💻 [SQL문] Subquery (0) | 2022.07.14 |
👩💻 [SQL] GROUP BY, ORDER BY (0) | 2022.07.07 |
👩🏼💻 [SQL] Select 쿼리문 (0) | 2022.07.05 |
댓글