본문 바로가기

카테고리 없음

개발일지 3주차 - SQL 여러 테이블의 정보를 연결하는 Join

여러 테이블을 연결 : Join

Join이란

두 테이블의 공통된 정보를 기준으로 테이블을 연결해서 한 테이블 처럼 보는 것

ex) user_id 필드의 기준으로 users 테이블과 orders 테이블을 연결해서 한느에 보고 싶다.

 

두 테이블의 정보를 연결해서 함께 보고 싶을 때 무언가 연결된 정보가 있을 떄, user_id 처럼 동일한 이름과 정보가 담긴 필드를 두 테이블에 똑같이 담아놓음 이런 필드를 두 테이블을 연결시켜주는 열쇠라는 의미로 key라고 부름

 

꿀팁

SQL에서의 Join도 마찬가지임

key값을 사용해 연결하고 싶은 태이블에 찾아가서 똑같은 값을 가지는 key를 찾게 되는데, 똑같은 key를 가지는 데이터가 여러개 있으며 어느 데이터를 가져와서 연결해야할지 알 수 없다.

 

고로key 값은 하나로 하는것이 좋음..

 

join을 사용해 key 갑으로 둥테이블 연결해보기

select * from point_users

left join users

on point_users_id = users.user_id

 

엑셀을 잘 쓰신다면 SQL의 join은 엑셀의 vlookup과 동일하다고 생각하면 됨

 

연습

orders 테이블에 users 테이블 연결해보기

select * from orders o

left join users u

on o.user_id = u.user_id

 

SQL 쿼리가 실행되는 순서

select * from enrolleds e

inner join courses c

on e.course_id = c.course_id

 

1) from enrolleds: enrolleds 테이블 데이터를 전체를 가져옴

2) inner join courses on e.course_id = c.course_id: courses를 enrolleds테이블에 붙이는데, enrolleds 테이블의 coruse_id와 동일한 course_id를 갖는 courses의 테이블을 붙임

3) select* :  붙여진 모든 데이터를 출력

항상 from에 들어간 테이블을 기준으로 다른 테이블이 붙는다고 생각

 

join심화

- '오늘의 다짐' 정보에 과목 정보를 연결해 과목별 오늘의 다짐 개수

select c2.title, count(c2.title) as checkin_count from checkins c  
inner join courses c2 
on c.course_id  = c2.course_id 
GROUP by c2.title 

 

Join 심화 SQL쿼리 실행순서

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

  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 테이블 데이터를 붙임
  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 필드를 기준으로 뭉쳐진 갯수를 세어서 출력

Join의 실행 순서는 항상 from과 붙어다닌다고 생각하면 편함