본문 바로가기
💾Database & Server/SQL

[SQL] Join의 종류와 사용법

by inbeom 2023. 8. 29.
728x90

💡Join이란?

2개 이상의 테이블을 연결하여 하나의 테이블처럼 데이터를 검색 할 때 사용한다.

 

Ex.

SELECT 테이블.컬럼, 테이블.컬럼
FROM 테이블1,테이블2           
WHERE 조건

 

Join의 종류

Inner Join, Natural Join, Outer Join, Left Join, Right Join, Cross Join

 

Inner Join

  • 내부조인은 가장 많이 사용되는 조인 구문 중에 하나다.
  • 내부 조인은 조인 Condition에 따라 2 개의 테이블(A, B)의 컬럼을 합쳐 새로운 테이블을 생성한다.
  • 즉 교차 조인을 한 결과에 조인 조건문을 충족시키는 레코드를 반환한다고 생각할 수 있다.

1)
SELECT 조회할 컬럼
FROM 테이블1, 테이블2
[WHERE 조건문]


2)
SELECT 조회할 컬럼
FROM 테이블1
(INNER) JOIN 테이블2
ON 테이블1.컬럼 = 테이블2.컬럼
[WHERE 추가조건]

 

 

Natural Join

  • 자연 조인은 두 테이블 간의 동일한 이름을 갖는 모든 컬럼들을 조인한다. 
  • 반드시 두 테이블 간의 동일한 이름, 타입을 가진 컬럼이 필요하다.
SELECT 조회할 컬럼
FROM 테이블1
NATURAL JOIN 테이블2
[WHERE 조건문]

 

Outer Join

outer join은 한 쪽에는 데이터가 있고, 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽 테이블의 내용을 모두 출력하는 것이다.

즉, 조건에 맞지 않아도 해당하는 행을 출력하고 싶을 때 사용할 수 있다.

left Outer Join

  •  왼쪽에 있는 테이블의 모든 결과를 가져 온 후 오른쪽 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL로 표시한다.

SELECT 검색할 컬럼
FROM 테이블명 LEFT OUTER JOIN 테이블명2
ON 테이블.컬럼명 = 테이블2.컬럼명;

 

Right Outer Join

  • 오른쪽 있는 테이블의 모든 결과를 가져온 후 왼쪽의 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL을 표시한다.

SELECT 검색할 컬럼
FROM 테이블명 RIGHT OUTER JOIN 테이블명2
ON 테이블명 = 테이블명2;

 

Full Outer Join

  • LEFT OUTER JOIN 과 RIGHT OUTER JOIN을 합친 것으로, 양쪽 모두 조건이 일치하지 않는 것까지 모두 결합해 출력한다

SELECT 검색할 컬럼
FROM 테이블명 FULL OUTER JOIN 테이블명2
ON 테이블.컬럼명 = 테이블2.컬럼명; (ORACLE의 경우)

 

Self Join

셀프 조인은 주로 위계성 데이터, 순차성 데이터를 다루거나 테이블 안의 관계성을 명시해야하는 등의 상황에 사용한다. 

1.위계성 데이터 (Hierarchical Data)

  • 위계성을 지니는 데이터가 셀프 조인을 필요로 하는 대표적인 데이터이다.

*각 사원의 매니저 이름을 같이 출력하는 query 

SELECT
 e.id,
 e.first_name,
 e.last_name,
 e.salary,
 m.first_name AS boss_first_name
 m.last_name AS boss_last_name
FROM employee AS e
INNER JOIN employee AS m
ON e.manager_id = m.id;

join 되는 예시

결과

 

2. 순차성 데이터 (Sequential Data)

  • 1개의 테이블 내에서 순차적으로 데이터를 출력할 때도 사용할 수 있다.

 

3. 1개의 테이블 안에 관계성이 명시되어야 할 데이터가 여러개 존재할 때

  • city 테이블에서route테이블을 조인해 출발지에 대한 정보를 가져오고, 해당 테이블에서 다시 city테이블을 조인해 도착지에 대한 정보를 추출한다.

city
route

SELECT
 start.name AS start_city,
 destination.name AS destination_city
FROM city AS start
INNER JOIN route AS r
      ON start.id = r.from_city_id
INNER JOIN city AS destination
     ON destination.id = r.to_city_id;

 

 

 

 

https://devbox.tistory.com/entry/Comporison-LEFT-JOIN-%EA%B3%BC-RIGHT-JOIN

https://rh-cp.tistory.com/44

https://doh-an.tistory.com/30

https://etloveguitar.tistory.com/123

 

 

 

 

 

 

728x90