본문 바로가기

SQL

[SQL] join (테이블 연결), Left Join(+ 연습), Inner Join,

# A와 B 테이블에 각각 원하는 정보가 나누어 있을 때, 각 테이블을 일일히 참고하는 것이 아닌, 한 테이블로 이어 붙여서 볼 수 있는 기능!

 

# join을 사용하기 위해서는, 각 테이블에서 판단할 수 있는 기준(key 값)이 하나 필요하다

# join의 종류 : Left Join, Inner Join

# Left Join : 각 테이블과 테이블끼리 겹치는 부분이 있다면, 겹치는 부분을 key 값이라고 고려하고 한 테이블을 기준으로 삼아서 다른 테이블을 이어붙이는 것이다.

 

SELECT * from users u 

select * from point_users pu

# 먼저 두 테이블을 살펴서, 공통된 필드명을 확인한다

 

SELECT * from users u 
left join point_users p on u.user_id = p.user_id

# NULL 값이 표기되는 사람도 있는데, 테이블끼리 겹치지 않는 부분의 값들은 상대 테이블에는 없을 수도 있기 때문에 그렇게 보일 수도 있다!

 

SELECT * from users u 
inner join point_users p on u.user_id = p.user_id

# Inner Join : 포인트가 있는 값만, 즉 교집합의 값만 나온다

# 즉 좌측의 A, 우측의 B, 서로가 겹치는 C가 있다고 고려한다면?

# Left Join은 좌측의 A(A+C)에 B를 붙이는 느낌이고

# Inner Join은 C를 기준으로 Join을 실행하는 느낌이라고 보면 된다

# Inner Join을 먼저 입문하길 권한다. Left Join은 순서에 영향을 크게 받는 반면 (테이블의 순서를 바꾸면 다른 값이 나올 수도 있다), Inner Join은 교집합이므로, 순서를 바꾸더라도 같은 값이 나오기 때문이다!

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

Q. 연습!

# 먼저 필드 확인

SELECT * from orders o 
SELECT * from users u

# 겹치는 필드를 확인한다. 겹치는 필드가 user_id라면

SELECT * from orders o 
inner join users u on o.user_id = u.user_id

# order 테이블을 기준으로 users 테이블을 user_id를 기준으로 붙인 것이다

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

Q. 연습 2

SELECT * from checkins c 
inner join users u on c.user_id = u.user_id

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

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

Q. 연습 3

SELECT * from enrolleds e 
inner join courses c on e.course_id = c.course_id

# enrollends 테이블에 courses 테이블 연결

# 같은 필드명을 갖고 있다고 하더라도 연결이 되지 않을 수도 있다! 같은 고유값을 같은 필드를 지정할 것

 

# 실행 순서? 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에 들어간 테이블을 기준으로, 다른 테이블이 붙는다고 생각하면 편하다!

'SQL' 카테고리의 다른 글

[SQL] Left Join 연습, Union  (0) 2022.11.04
[SQL] Inner join 연습  (0) 2022.11.04
[SQL] 연습, Alias (별칭)  (0) 2022.11.03
[SQL] order by (정렬)  (1) 2022.11.03
[SQL] group by, count, max, avg, sum  (0) 2022.11.01