본문 바로가기
DB/ORACLE

CTAS 를 활용한 테이블 생성(서브 쿼리를 활용한 방법), INNER JOIN, FULL OUTER JOIN(ANSI SQL에서만 가능)

by 골든크랩 2022. 12. 23.
728x90
반응형

예)

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;

 

 

 

728x90
반응형

댓글