본문 바로가기
SQL

JOIN(INNER, LEFT) 기초

by 2nyong 2023. 3. 21.

데이터베이스에서 사용되는 조인테이블간의 결합을 의미한다.

 

- INNER JOIN

https://www.w3schools.com/sql/sql_join_inner.asp

이너조인은 결합하려는 두 테이블 간의 공통 요소를 통해 결합하는 방식으로 가장 일반적으로 사용되는 조인이다.

 

이너조인의 기본적인 형태는 다음과 같이 작성된다.

SELECT table1.col1, table1.col2, ..., table2.col1, table2.col2, ... FROM table1 t1
INNER JOIN table2 t2 
ON t1.col1 = t2.col2

 

위 쿼리에서 t1, t2로 작성된 각 테이블의 별칭은 SELECT절 뿐만 아니라 이후 사용되는 구절에서 table1, table2와 같은 정식 명칭을 대체하여 사용할 수 있습니다.

 

이너조인은 공통 요소를 통해 결합하는 방식이므로, ON 에 기준이 되는 컬럼명을 작성한다.

 

userspoint_users 테이블에는 각각 user_id라는 컬럼이 존재하며, 이를 기준으로 이너조인을 적용할 수 있다.

SELECT u.user_id, u.name, u.email, pu.point FROM users u 
INNER JOIN point_users pu 
ON u.user_id = pu.user_id;

 

users 테이블orders 테이블을 사용하여 네이버 이메일을 사용하는 유저의 성씨별 주문건수를 조회하고 정렬하였다.

SELECT u.name, count(u.name) AS count_name FROM orders o
INNER JOIN users u
ON o.user_id = u.user_id 
WHERE u.email LIKE '%naver.com'
GROUP BY u.name
ORDER BY count_name DESC;

 


 

- LEFT JOIN

https://www.w3schools.com/sql/sql_join_left.asp

레프트조인은 table1을 기준으로 table2를 결합하는 방식으로 A테이블에 B테이블을 결합한다고 할 때 그 순서가 매우 중요하다.

 

레프트 조인의 기본적인 작성 형태는 다음과 같다.

SELECT table1.col1, table1.col2, ..., table2.col1, table2.col2, ... FROM table1 t1
OUTER JOIN table2 t2 
ON t1.col1 = t2.col2

 

이너조인과 마찬가지로 userspoint_users 테이블의 user_id라는 컬럼을 기준으로 레프트조인을 적용하였다.

SELECT u.user_id, u.name, u.email, pu.point FROM users u 
INNER JOIN point_users pu 
ON u.user_id = pu.user_id;

 

레프트조인 적용 결과, 이너조인 적용 결과와 다르게 point 컬럼이 NULL인 값들이 조회되었다. point는 강의 수강 후 지급되는 것으로, id는 만들었으나 아직 강의를 수강하지 않은 유저가 있기 때문이다.

 

따라서, users 테이블에는 존재하지만 point_users 테이블에는 존재하지 않는 값들을 조회하기 위해서는 결합 기준과 대상을 고려하여 users 테이블을 기반으로 point_users 테이블을 결합해야한다.

 

2020-07-10 부터 2020-07-19 사이에 가입한 고객 중 포인트를 가진 고객, 전체 고객 숫자, 비율을 조회해보았다.

※ COUNT는 NULL을 세지 않는다!!

SELECT 
	COUNT(pu.point) AS pnt_user_cnt,
	COUNT(u.user_id) AS tot_user_cnt,
	ROUND(COUNT(pu.point)/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'

 

반올림에 사용하는 ROUND 함수를 통해 ratio를 소수점 둘째자리까지 나타냈다.

'SQL' 카테고리의 다른 글

데이터 구조  (0) 2023.03.21
GROUP BY, ORDER BY 기초 및 집계함수  (0) 2023.03.21
WHERE문 기초  (0) 2023.03.20
SELECT문 기초  (0) 2023.03.20
SQL 이란?  (0) 2023.03.20

댓글