본문 바로가기
SQL

-SQL 3주차-

by @kkkk_biiin 2023. 1. 18.
728x90

(아래 나오는 내용들은 스파르타 코딩클럽의 엑셀보다 쉬운 SQL 강의 내용을 정리한 것이다.) 

1. Inner Join

inner join은 A와 B라는 두 개의 테이블이 있을 때, 두 테이블의 교집합만을 추출해 합치는 join 방법을 말한다. 이 방법을 실행할 때는 두 개의 테이블과 두 개의 테이블에 공통적으로 존재하는 key 값이 필요하다.

SELECT * from point_users pu 
inner join orders o on pu.user_id = o.user_id

위와 같은 방식으로 inner join이 진행되며, on 뒤에 나오는 필드들은 두 테이블을 연결하기 위한 key 값이며, 각각의 필드 앞에 붙은 영어(pu, o)는 임의로 지정한 예명(Alias)으로, 이것을 활용하면 코드의 길이를 줄이고 가독성을 높일 수 있다.

 

웹개발, 앱개발 종합반의 week 별 체크인 수를 세어보기 (퀴즈 4번)

SELECT c.title, ch.week, COUNT(*) as cnt  FROM  courses c 
inner join checkins ch on c.course_id = ch.course_id 
#inner join users u on ch.user_id = u.user_id
GROUP by c.title, ch.week  
order by c.title, ch.week

위의 방식처럼 Group by, Order by를 콤마(,)를 활용하여 쉽게 표현할 수 있으며, as ooo을 활용해 별칭을 지어줄 수도 있다.

추가적으로 위의 테이블에 새로운 테이블을 붙이고 싶다면, 주석 부분을 넣어주면 쉽게 join이 가능하다.

2. Left join

left join은 말 그대로 왼쪽으로 join을 하는 것으로, 왼쪽에 있는 테이블에 key 값을 기준으로 오른쪽 테이블을 붙이는 것을 말한다.

SELECT * from point_users pu 
left join orders o on pu.user_id = o.user_id

left join의 형식은 inner join의 형식과 같으며, 만약 왼쪽 테이블에 있는 데이터가 오른쪽 테이블에는 없을 경우 Null 값으로 표시된다.

3. Union

union은 결과물을 합치는 것으로 select를 활용해 추출한 데이터를 합쳐주는 기능이다. union을 사용할 때 주의해야할 점은 합치고자 하는 두 결과물의 필드명이 같아야 한다는 점이다.

(
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
)

union을 활용하는 방법은 간단하게, 두 가지 결과물 사이에 union all을 활용하면 된다.

또한 위에 있는 것처럼 '7월' as month를 활용하여 새로운 필드와 데이터 값을 추가할 수 있다. 

4. NULL

where user_id is NULL

위처럼 is null을 사용하면 null 값을 가지고 있는 데이터만 출력하며, 반대로 하고싶을 때 in not null을 활용하면 된다.

728x90

'SQL' 카테고리의 다른 글

-SQL 문법정리-  (0) 2023.01.20
-SQL 4주차-  (0) 2023.01.19
-SQL 2주차-  (0) 2023.01.17
-SQL 1주차-  (0) 2023.01.16