Oracle JOIN, ANSI JOIN
부트캠프(END)/Oracle2022. 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 : 표준화된 조인
--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 |
댓글()