본문 바로가기
내마음대로만들어보자/SQL

[SQL] Join 테이블 연결하기

by 소농민! 2022. 3. 6.
728x90

1. Join 이란 

두 테이블의 공통된 키 값으로 연결해서 한테이블 처럼 볼 수 있도록 해준다.

(엑셀에서의 Vlookup과 동일)

 

2. Join 종류 

- Left Join : A,B 테이블 중 왼쪽에 있는 테이블 키 값을 기준으로 테이블을 연결시켜준다. 

                     (이때, 왼쪽에 있는 테이블의 키 값을 기준으로 연결시켜주므로 null값 즉, 비어있는 값이 생길 수 있다.)

- inner Join : A,B테이블 중 순서에 상관없이 키 값을 기준으로 교집합이 되는 값만을 연결시켜 보여준다.

 

select * from users u

inner join point_users p on u.user_id = p.user_id;

 

주의할점은 테이블을 연결해주어야하므로 어느 테이블의 user_id인지 구분하도록 별칭을 꼭 해줘야한다.

 

3. Join 예제

- orders 테이블에 users 테이블 연결

select * from orders o

inner join users u on o.user_id = u.user_id;

 

- checkins 테이블에 users 테이블 연결

select * from checkins c

inner join users u on c.user_id = u.user_id;

 

- enrolleds 테이블에 courses 테이블 연결

select * from enrolleds e

inner join courses c on e.course_id = c.course_id;

 

* SQL 쿼리 실행 순서

from → join → select

  1. from enrolleds: enrolleds 테이블 데이터 전체를 가져온다.
  2. inner join courses on e.course_id = c.course_id: courses를 enrolleds 테이블에 붙이는데, enrolleds 테이블의 course_id와 동일한 course_id를 갖는 courses의 테이블을 붙인다.
  3. select * : 붙여진 모든 데이터를 출력

항상 from에 들어간 테이블을 기준으로 다른 테이블을 붙인다. 

 

 

- checkins 테이블에 courses 테이블 연결해서 통계치 (과목별 오늘의 다짐 개수)

select co.title, count(co.title) as checkin_count from checkins ci

inner join courses co on ci.course_id = co.course_id

group by co.title

 

- point_users 테이블에 users 테이블 연결해서 순서대로 정렬 

select * from point_users p

inner join users u on p.user_id = u.user_id

order by p.point desc

 

- orders 테이블에 users 테이블 연결해서 통계치(네이버 이메일을 사용하는 유저의 성씨별 주문건수)

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

 

* SQL 쿼리 실행 순서

from → join → where → group by → select

  1. from orders o: orders 테이블 데이터 전체를 가져오고 o라는 별칭을 붙인다. 
  2. inner join users u on o.user_id = u.user_id : users 테이블을 orders 테이블에 붙이는데, orders 테이블의 user_id와 동일한 user_id를 갖는 users 테이블 데이터를 붙입니다. (*users 테이블에 u라는 별칭을 붙입니다)
  3. where u.email like '%naver.com': users 테이블 email 필드값이 naver.com으로 끝나는 값만 가져옵니다.
  4. group by u.name: users 테이블의 name값이 같은 값들을 뭉쳐줍니다.
  5. select u.name, count(u.name) as count_name : users 테이블의 name필드와 name 필드를 기준으로 뭉쳐진 갯수를 세어서 출력해줍니다.

강의에서 알려준 SQL 실행 순서에 대해 이해를 하고 있다면 

내가 원하는 데이터도 이러한 순서대로 생각을 해서 쿼리를 짜면 될 것 같다. 

 

'내마음대로만들어보자 > SQL' 카테고리의 다른 글

[SQL] Group by, Order by  (0) 2022.02.26
[SQL] Select, Where 기본 문법 예제  (0) 2022.02.22
[SQL] Select, Where절 기본문법  (0) 2022.02.21
[SQL] Select 쿼리문의 개념  (0) 2022.02.21