Oracle JOIN, ANSI JOIN

부트캠프(END)/Oracle|2022. 6. 22. 17:51

EQUI_JOIN : 연산자 =을 써서 조인
NON_EQUI_JOIN : AND, OR, BETWEEN 등을 포함하여 조인

--EQUI_JOIN
SELECT empno, ename, job, sal, dname, loc, grade
FROM emp e JOIN dept d ON e.deptno = d.deptno
--NON_EQUI_JOIN
SELECT empno, ename, job, sal, dname, loc, grade
FROM emp e JOIN salgrade s ON sal BETWEEN losal AND hisal

 

Oracle JOIN : 오라클에서만 사용하는 조인 (MySQL도 가능)

ANSI JOIN : 표준화된 조인

ANSI JOIN에 대한 내용은 여기

--Oracle INNER JOIN 
SELECT A.a, B.a
FROM A, B
WHERE A.a = B.a

--ANSI INNER JOIN
SELECT A.a, B.a
FROM A JOIN B ON A.a = B.a

 

INNER JOIN과 OUTER JOIN의 차이?

→ OUTER는 두 테이블이 JOIN되었을 때 그 기준에 부합하지 않는 NULL 데이터도 함께 표시해 준다.

ex. 고객 정보 테이블과 주문 정보 테이블을 결합하여 "고객의 주문 정보"를 보려고 할 때, INNER는 주문 정보 테이블에 존재하지 않는(=가입은 되어 있으나 주문은 한 적이 없는) 고객의 데이터는 제외하지만 OUTER는 주문을 한 번도 한 적이 없는 고객의 데이터 NULL로 표시한다.

Left/Right Join 둘 다 Outer Join의 한 종류.

→ 어떤 테이블을 기준으로 테이블을 출력하느냐에 따라 분류된다.

LEFT JOIN의 경우 JOIN 조건에 부합하는 데이터가 오른쪽에 있으면 select하고, 없다면 null값을 채워넣는다. =왼쪽을 기준으로 왼쪽 테이블의 데이터는 모두 불러오되 오른쪽 테이블의 데이터는 왼쪽에 대한 것만 불러오겠다. RIGHT JOIN : 오른쪽을 기준으로... *거의 안씀.

--Oracle RIGHT/LEFT OUTER JOIN
SELECT e1.ename, e2.ename
FROM emp e1, emp e2
--WHERE e1.mgr (+)= e2.empno  -- RIGHT OUTER JOIN
WHERE e1.mgr = e2.empno(+) -- LEFT OUTER JOIN

--ANSI RIGHT/LEFT OUTER JOIN
SELECT e1.ename, e2.ename
--FROM emp e1 RIGHT JOIN emp e2 ON e1.mgr = e2.empno --RIGHT OUTER JOIN
FROM emp e1 LEFT JOIN emp e2 ON e1.mgr = e2.empno --LEFT OUTER JOIN

'부트캠프(END) > Oracle' 카테고리의 다른 글

서브쿼리, ROWNUM, 인라인뷰, DDL  (0) 2022.06.27
Oracle 내장 함수  (0) 2022.06.21
NVL, LIKE, ORDER BY + JDBC예제  (0) 2022.06.20

댓글()