예)
CREATE TABLE DEPT1 AS SELECT DEPTNO, DNAME FROM DEPT WHERE DEPTNO IN (10, 20);
CREATE TABLE DEPT2 AS SELECT DEPTNO, DNAME FROM DEPT WHERE DEPTNO IN (10, 30);
조회를 한다면, 아래 4 문장은 모두 동일한 결과를 준다.
SELECT * FROM DEP1 D1, DEP2 D2 WHERE D1.DEPTNO = D2.DEPTNO;
ANSI SQL을 사용한 방법들.
SELECT * FROM DEP1 D1 JOIN DEP2 D2 ON D1.DEPTNO = D2.DEPTNO;
SELECT * FROM DEP1 D1 INNER JOIN DEP2 D2 ON D1.DEPTNO = D2.DEPTNO;
SELECT * FROM DEP1 D1 INNER JOIN DEP2 D2 USING(DEPTNO);
여기서 OUTER JOIN을 써보면..어느쪽에 (+) 를 붙이는가에 따라 결과가 달라진다.
SELECT * FROM DEP1 D1, DEP2 D2 WHERE D1.DEPTNO(+) = D2.DEPTNO;
SELECT * FROM DEP1 D1, DEP2 D2 WHERE D1.DEPTNO = D2.DEPTNO(+);
그렇다면 각 테이블의 없는 데이터를 모두 나오게 하려면???
ORACLE SQL에서는 불가능하고, ANSI SQL 을 통해서 해결할 수 있다.
이것을 FULL OUTER JOIN 이라고 함.
SELECT * FROM DEP1 D1 FULL OUTER JOIN DEP2 D2 ON D1.DEPTNO = D2.DEPTNO;
'DB > ORACLE' 카테고리의 다른 글
Student, Department, Professor, gift, customer 샘플 테이블 데이터 (0) | 2022.12.23 |
---|---|
JOIN의 종류 (0) | 2022.12.23 |
Outer Join (0) | 2022.12.23 |
Self Join 자기 참조 조인, Outer Join (0) | 2022.12.23 |
DBeaver 실행 계획, 쿼리 수행 시간 확인 (0) | 2022.12.21 |
댓글