여러 테이블을 연결 : 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
- from orders o: orders 테이블 데이터 전체를 가져오고 o라는 별칭을 붙임
- inner join users u on o.user_id = u.user_id : users 테이블을 orders 테이블에 붙이는데, orders 테이블의 user_id와 동일한 user_id를 갖는 users 테이블 데이터를 붙임
- where u.email like '%naver.com': users 테이블 email 필드값이 naver.com으로 끝나는 값만 가져옴
- group by u.name: users 테이블의 name값이 같은 값들을 뭉침
- select u.name, count(u.name) as count_name : users 테이블의 name필드와 name 필드를 기준으로 뭉쳐진 갯수를 세어서 출력
Join의 실행 순서는 항상 from과 붙어다닌다고 생각하면 편함