성장하는 중/SQL

[SQL 개발일지 : 3주차] join과 union

AMBITION_Y 2023. 1. 29. 22:49

빠르게 3주차 강의까지 마무리 되었다.

엑셀보다는  훨씬 쉬운것 같다.

 

join <--- 말그래도 두개의 table을  붙이는 기능을 한다.

 - inner join = 교집합

ex)

SELECT * from orders o
inner join users u
on o.user_id = u.user_id 

 

 - left join = 첫 테이블 뒤에 다른 테이블을 붙이는 개념이다.

inner join과 형식은  똑같지만, inner join은 교집합이므로 겹치는 데이터들만 보여주지만

left join은 첫 테이블은 그대로 남아있으므로 붙이는 테이블의 순서가 중요해진다.

left join을  하면 빈 값이 생기기도 하는데 NULL로 표시된다.

 

join은 굉장히 쉬운 개념이였지만 퀴즈들을 통해서

select 뒤에 어떤 값들은 보여주고자 할 지 다양하게 표현할 수 있다는 것을 배웠다.

 

ex)

SELECT count(pu.point_user_id) as pnt_user_cnt, 
       count(u.user_id) as tot_user_cnt,
       round(count(pu.point_user_id)/count(u.user_id),2) as ratio
  FROM users u 
  left join point_users pu 
  on u.user_id = pu.user_id 
  WHERE u.created_at BETWEEN '2020-07-10' and '2020-07-20'

 

이런  식으로 join한  테이블에서 where로 특정 데이터를 추려낸 후에

select는 어떤 것을 할지 다양하게 설정해보는 것이 낯설었지만 편리했고

as 별칭 붙이기나 테이블 별칭이 왜 필요한지도 알게 되었다.

 

union <--- 두개의 SQL query 값을 붙여서 표시하는 기능을 한다.

생김새는 굉장히 단순하다.

(sql)
union all
(sql)

* union을 하면 각 sql에 적용되었단 order by가 작동하지 않기때문에 union 한 뒤에 다시 재정렬 해줘야한다.

 

벌써 다음 번이 4주차 강의로 마지막을 달린다.

배우는 것이 어렵게 느껴지진 않지만 쉬운 개념들이 차곡차곡 쌓여서

어려운 문제를 풀 수 있게 활용되는 기분을 느끼고 있다.