코진남

서브쿼리 ON, WHERE 차이점 본문

Database

서브쿼리 ON, WHERE 차이점

woojin126 2021. 12. 12. 15:22

두번째, ON과 WHERE 조건을 어디에 줄 것 인가?

먼저, ON에 조건을 거는 것과 WHERE에 조건을 거는 것의 차이를 알아야한다.

-- ONWHERE 의 차이 1

-- ON에 조건

SELECT A.EMPNO, A.DEPTNO, B.DNAME, B.LOC

FROM EMP A

INNER

JOIN DEPT B

ON A.DEPTNO = B.DEPTNO

AND A.DEPTNO = 10;

-- WHERE에 조건

SELECT A.EMPNO, A.DEPTNO, B.DNAME, B.LOC

FROM EMP A

INNER

JOIN DEPT B

ON A.DEPTNO = B.DEPTNO

WHERE A.DEPTNO = 10;

결론부터 말하자면 두 쿼리의 결과는 같다.

하지만 내부 동작과정이 아예 다름.

ON에 조건을 거는 것은 애초에 시작이 다르다. 간단하게, 테이블을 합칠 때 조건이 걸려서 테이블이 완성된다. WHERE절에 조건이 걸리면, 다 만들어진 테이블을 다시 훑으면서 해당 조건에 맞는 결과물을 반환하는 것이다. 이는 OUTER JOIN에서 확연하게 차이를 보인다.

-- ON 과 WHERE 의 차이 2

SELECT A.EMPNO, A.DEPTNO, B.DNAME, B.LOC

FROM EMP A

LEFT

OUTER JOIN DEPT B

ON A.DEPTNO = B.DEPTNO

AND B.LOC = 'NEW YORK';

SELECT A.EMPNO, A.DEPTNO, B.DNAME, B.LOC

FROM EMP A

LEFT OUTER JOIN DEPT B

ON A.DEPTNO = B.DEPTNO

WHERE B.LOC = 'NEW YORK';

ON에 조건표기시, LEFT OUTER JOIN시 왼쪽 테이블에 있는 모든 컬럼을 출력후 그에 매칭이되는 값이 있으며 채워서 출력이되고, 아닌 것은 NULL로 표현되기에 14개의 결과가 나왔다. 반면에, 이미 14개의 결과를 가진 테이블을 만든 후 'NEW YORK' 조건을 걸어주면 그림처럼 3개의 결과가 나오게 된다.

 

'Database' 카테고리의 다른 글

트랜잭션  (0) 2021.12.12
다중행 서브쿼리  (0) 2021.12.12
서브쿼리,단일행 서브쿼리  (0) 2021.12.12
서브쿼리 란?  (0) 2021.12.12
오라클 데이터 처리 가공 함수모음  (0) 2021.12.12