[DB] INNER JOIN과 OUTER JOIN

HenryHong·2022년 7월 26일
0
post-custom-banner

Join(조인)

  • 조인이란 여러 테이이블에 흩어져 있는 정보 중 사용자가 필요한 정보만 가져와서 가상의 테이블처럼 만들어서 결과를 보여주는 것으로 2개의 테이블을 조합하여 하나의 열로 표현하는 것이다.

조인의 종류

  1. INNER JOIN

  2. CROSS JOIN

  3. OUTER JOIN

  4. SELF JOIN

1. INNER JOIN(내부 조인)

  • INNER JOIN은 키 값이 있는 테이블의 컬럼 값을 비교 후 조건에 맞는 값을 가져오는 것이다. 간단히 말하면 서로 연관된 내용만 검색하는 조인 방법이다.

사용법

SQ은 명시적 조인 표현과 암시적 조인 표현으로 구분을 지정한다.

(1) 명시적 조인 표현

  • 명시적 조인표현 에서는 테이블에 조인을 하라는 것을 지정하기 위해 'JOIN' 키워드를 사용하고 ON의 키워드를 조인에 대한 구문을 지정하는데 사용한다.
SELECT *

FROM EMPLOYEE INNER JOIN DEPARTMENT

ON EMPLOYEE.DepartmentID = DEPARTMENT.DepartmentID;

(2) 암시적 조인 표현

  • 암시적 조인 표현은 SELECT 구문의 FROM절에서 콤마(,)를 사용하여 단순히 조인을 위한 여러 테이블을 나여할하기만 하면된다.
SELECT *

FROM EMPLOYEE, DEPARTMENT

WHERE EMPLOYEE.DepartmentID = DEPARTMENT.DepartmentID;

(Inner join 결과)

1-1. EQUI JOIN(동등조인)

  • EQUAL 연산자(=)를 사용해서 EQUI JOIN이라고 한다.

    WHERE 절에 기술되는 JOIN 조건을 검사해서 양쪽 테이블에 같은 조건의 값이 존재할 경우 해당 데이터를 가져오는 조인 방법이다.

SELECT *

FROM EMPLOYEE , DEPARTMENT

WHERE EMPLOYEE.DepartmentID = Department.DepartmentID;



SELECT *

FROM EMPLOYEE JOIN DEPARTMENT

ON EMPLOYEE.DEPARTMENTID = DEPARTMENT.DEPARTMENTID;

2. CROSS JOIN(교차조인)

  • CROSS JOIN은 Cartesian Product(카디션 곱)이라고도 하며 조인되는 두 테이블에서 곱집합을 반환한다.

즉, 두 번째 테이블로부터 각 열과 첫 번째 테이블에서 각 열이 한번씩 결합된 열을 만들 것이다. 예를 들어 m열을 가진 테이블과 n열을 가진 테이블이 교차 조인되면 m*n 개의 열을 생성한다. 그래서 테이블의 각 값을 연결하여 테이블 행의 수를 모두 곱한 값만큼 만들어진다.

사용법

SELECT *

FROM EMPLOYEE CROSS JOIN DEPARTMENT;

employee 테이블의 튜플이 6개이고 department 테이블의 튜플이 4개면 6 X 4 = 24개의 결과가 나오는 것이다.

3. OUTER JOIN

  • Outer Join은 조인하는 여러테이블에서 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽 테이블의 내용을 전부 출력하는 방법이다. 즉, 조인 조건에 만족하지 않아도 해당 행을 출력하고 싶을 때 사용할 수 있다.

Outer Join에는 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있다.

3-1. LEFT OUTER JOIN

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

사용법

SELECT *

FROM EMPLOYEE E LEFT OUTER JOIN DEPARTMENT D 

ON E.DEPARTMENTID = D.DEPARTMENTID;


<ORACLE>

SELECT *

FROM EMPLOYEE E, DEPARTMENT D

WHERE E.DepartmentID = D.DepartmentID(+);

3-2. RIGHT OUTER JOIN

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

사용법

SELECT *

FROM EMPLOYEE E RIGHT OUTER JOIN DEPARTMENT D

ON E.DepartmentID = D.DepartmentID;


<ORACLE>

SELECT *

FROM EMPLOYEE E , DEPARTMENT D

WHERE E.DepartmentID(+) = D.DepartmentID;

3-3. FULL OUTER JOIN

  • Full Outer Join은 LEFT OUTER JOIN과 RIGHT OUTER JOIN을 합친 것이다.

양쪽 모두 조건이 일치하지 않는 것들까지 모두 결합하여 출력한다.

사용법

SELECT *

FROM EMPLOYEE E FULL OUTER JOIN DEPARTMENT D

ON E.DepartmentID = D.DepartmentID;

MySql에서는 Full Outer Join 키워드가안되므로 이런식으로 해준다.(물론 방법은 다양하지만..)

SELECT *

FROM EMPLOYEE E LEFT OUTER JOIN department D

ON E.DepartmentID = D.DepartmentID

UNION

SELECT *

FROM EMPLOYEE E RIGHT OUTER JOIN DEPARTMENT D

ON E.DEPARTMENTID = D.DEPARTMENTID;

4. SELF JOIN

  • SELF JOIN은 테이블에서 자기자신을 조인을 시키는 것이다.

사용법

select F.empno, F.ename, S.empno, S.ename, S.job

from emp F inner join Emp S

on F.job = S.job

where F.empno < S.empno

order by F.empno, S.empno;
profile
주니어 백엔드 개발자
post-custom-banner

0개의 댓글