언어/SQL

Outer Join (LEFT, RIGHT, FULL OUTER JOIN)

asu2880 2022. 6. 14. 16:02

Outer Join

  • Equi Join은 조인을 생성하려는 두 개의 테이블의 한쪽 컬럼에서 값이 없다면 테이터를 반환하지 못한다.
  • 동일 조건에서 조인 조건을 만족하는 값이 없는 행들을 조회하기 위해 Outer Join을 사용 한다.
  • Outer Join 연산자는 "(+)" 이다.
  • 조인시 값이 없는 조인측에 "(+)"를 위치 시킨다.
  • Outer Join 연산자는 표현식의 한 편에만 올 수 있다.

 

💊 Equi Join과 Outer Join의 비교

-- Equi Join 으로 부서 번호를 조회하는 예제
SELECT DISTINCT(e.deptno), d.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno;

DEPTNO     DEPTNO
------ ----------
    10         10
    20         20
    30         30
-- Outer Join 으로 부서 번호를 조회하는 예제
SELECT DISTINCT(e.deptno), d.deptno
  FROM emp e, dept d
 WHERE e.deptno(+) = d.deptno;

DEPTNO  DEPTNO
 ------- --------
     10       10
     20       20
     30       30
              40


💊 Outer Join을 사용하는 테이블에 추가로 조건절이 있다면 (+)연산자를 모두 해야 한다

-- ename LIKE 조건절에 (+)연산자가 누락된 경우
SELECT DISTINCT(a.deptno), b.deptno
  FROM emp a, dept b
 WHERE a.deptno(+) = b.deptno
   AND a.ename LIKE '%';
 
DEPTNO     DEPTNO
---------- ----------
        10         10
        20         20
        30         30
-- ename LIKE 조건절에 (+)연산자를 추가해야 정상적으로 데이터가 조회 된다. 
SELECT DISTINCT(a.deptno), b.deptno
  FROM emp a, dept b
 WHERE a.deptno(+) = b.deptno
   AND a.ename(+) LIKE '%';
 
DEPTNO  DEPTNO
 ------- --------
     10       10
     20       20
     30       30
              40
 
 

 

LEFT, RIGHT, FULL Outer Join

Oracle9i 부터는 ANSI/ISO SQL 표준인 LEFT OUTER JOIN , RIGHT OUTER JOIN, FULL OUTER JOIN를 지원 한다.

🌱 LEFT OUTER JOIN

LEFT OUTERL JOIN은 오른쪽 테이블(아래 예제에서 emp테이블)에 조인시킬 컬럼의 값이 없는 경우 사용한다.

💊 LEFT OUTER JOIN 조인 예제

SELECT DISTINCT(e.deptno), d.deptno
FROM dept d
LEFT OUTER JOIN emp e
ON d.deptno = e.deptno;
 

🌱 RIGHT OUTER JOIN

RIGHT OUTERL JOIN은 왼쪽 테이블(아래 예제에서 emp테이블)에 조인시킬 컬럼의 값이 없는 경우 사용한다.

💊 RIGHT OUTER JOIN 조인 예제

SELECT DISTINCT(e.deptno), d.deptno
FROM emp e
RIGHT OUTER JOIN dept d
ON e.deptno = d.deptno;
 

🌱 FULL OUTER JOIN

FULL OUTERL JOIN은 양쪽 테이블 모두 Outer Join걸어야 하는 경우 사용 한다.

💊 FULL OUTER JOIN 조인 예제 

SELECT DISTINCT(e.deptno), d.deptno
FROM emp e
FULL OUTER JOIN dept d
ON e.deptno = d.deptno;
 
728x90
반응형

'언어 > SQL' 카테고리의 다른 글

SQL_집합 연산자  (0) 2022.06.24
CROSS JOIN, INNER JOIN, NATURAL JOIN, USING, ON  (0) 2022.06.14
Equi Join, Non_Equi Join, Self Join  (0) 2022.06.14
UNION, INTERSECT, MINUS 연산자  (0) 2022.06.14
서브쿼리  (0) 2022.06.14