코린이 유치원/SQL반

03 - 2 JOIN (Inner Join)

개나리반 2022. 6. 2. 00:16

 

소스/타겟 테이블

소스 테이블: 먼저 주체가 되는 테이블, 즉 우리가 먼저 이 테이블에 을 읽어야 한다고 생각되는 테이블.

타겟 테이블: 소스를 먼저 읽은 후 소스에 조인할 대상이 되는 테이블

👉 소스테이블과 타겟 테이블은 목적에 따라 달라지기 때문에. 가변적 

즉, 부모 테이블이 소스 or 타겟이 될 수도, 자식 테이블이 소스 or  타겟이 될수도 있음!

 

 Inner Join 정의

Inner Join은 합치는 행 둘 다 조건을 만족하는 행만 합치는 것

간단하게 프렌즈 인사정보 테이블로 설명을 하자면, 하기와 같이 두개의 테이블이 있고 inner join을 통해 합쳐보자.

 

hr - 자식 테이블

ID hr_name dept_id
100 모니카 1
101 피비 1
102 챈들러 1
103 로스 2
104 레이첼 2
 
 

dept - 부모 테이블

 
dept_id dept_name dept_number
1 기획부 203
2 인사부 204
3 개발부 205

 

hr과 dept Inner Join

 
ID hr_name dept_id dept_id dept_name 내dept_number
100 모니카 1 1 기획부 203
101 피비 1 1 기획부  203
102 챈들러 1 1 기획부  203
103 로스 2 2 인사부 204
104 레이첼 2 2 개발부 204

 

그럼 다음과 같이 테이블이 합쳐진다.

hr에 있지 않은 3번 개발부는 사라진다. 물론 hr 테이블에 dept 테이블에 없는 행이 있다면 그 행도 조건을 만족하지 못하기 때문에 사라졌을 것이다.

그럼 어떻게 이렇게 행을 합치냐구yo?

 

 

 Inner Join 구문

👉 Inner Join 기본 구문

FROM  테이블a INNER JOIN 테이블b ON 조인조건
  • Inner Join은 From에서 작성
  • on 조인조건에는 부모 테이블의 PK(Primary Key)와 자식(Foreign Key)를 사용할 조건 작성

 

👉 Inner Join 응용

그럼 위와 같이 합쳐야 할 경우는 어떻게 해야 합칠까?

우선 우리의 PK와 FK는 dept 테이블의 dept_id, hr 테이블의 dept_id 이다. 

조건은? 조건은 둘의 번호가 같은 행끼리 짝을 지어야 한다. 그래서 equal 연산자 '=' 를 써줄 것이다.

select *
from hr inner join dept on hr.dept_id = dept.dept_id;

이렇게 작성해주면 된다.

왜 dept_id  앞에 갑자기 hr과 dept를 붙여주냐고?

우린 각각 테이블에 dept_id가 있기 때문에 각 테이블 이름을 쓰고 '쩜'을 찍어서 각 테이블의 어떤 컬럼인지 표시해줘야 하기 때문!

 

별칭사용

select *
from hr h inner join dept d on h.dept_id = d.dept_id;

추가로, 조금 더 편리하게 별칭? 별명?을 지어질 수 있는데, 보통 테이블 앞글자 따온 알파벳으로 설정한다.

그러면 조건 적는게 조금 더 빨라지기 때문에.(우리에겐 빠르고 정확한게 choigo!)

 

👉 두개 이상 테이블 Join

그럼, 두개만 합칠 수 있는 건가요?

ㄴㄴ 여러개 원하는 만큼 합칠 수 있습니다.

 

hr - 자식 테이블

ID hr_name Job_id dept_id
100 모니카 MGR 1
101 피비 AS 1
102 챈들러 AS 1
103 로스 MGR 2
104 레이첼 PRE 2

 

dept - 부모 테이블

dept_id dept_name dept_number
1 기획부 203
2 인사부 204
3 개발부 205

 

Job - 부모 테이블

Job_id min_salary max_salary
Assitant 4000 5000
Senior 5500 8000
Manager 8500 10000
President 15000 99999

 

 이렇게 3개의 table을 합쳐보좌. 우선 코드를 먼저 봐보좌.

select * 
from hr h inner join dept d h.dept_id = d.dept_id
          inner join job j h.job_id = j.job_id;

동일하게 공유하는 컬럼을 조건으로 써서 한 줄 만 추가해주면 됨!

앞에 무엇이랑 합칠지 쓰지 않은 것은, 앞에 합쳐진 테이블 뒤에다 붙이는 것이기 때문에 두번째 줄 수식 전체가 붙일 테이블이기 때문!

이런식으로 작성하다보면 원하는 갯수만큼 테이블을 합칠 수 있음 ✌️