OR 조건과 같은 결과를 가져온다.
'=' 비교만 가능하다 ( <> 와 같은 크고작음은 X )
메인쿼리의 비교조건이 서브쿼리의 결과 중 '만족하는 값이 하나라도 존재하면' 참(1) 아니면 거짓(0) 을 반환
메인쿼리 -> 서브쿼리 실행순으로 진행된다.
WHERE 조건절로 EXISTS 사용할 경우 WHERE 1 로 실행이 되서 조건에 맞는 모든 결과를 보여준다.
( EXISTS 외에도 WHERE 조건절에 1을 쓰면 결과를 보여주고 0 이면 결과를 보여주지 않는다 )
IN 과 EXISTS 로 동일한 결과를 얻을 때 EXISTS 가 더 많은 쿼리문이 필요하다.
IN 이 쓰기는 더 편하지만 EXISTS 가 속도가 더 빠르기 때문에 EXISTS 를 사용하기도 한다.
EXISTS 는 메인쿼리로 데이터를 우선 확보한 뒤 서브쿼리를 실행하기 때문에 속도가 더 빠르다. 반면 IN 은 서브쿼리의 내용들을 찾아가며 메인쿼리를 돌리기 때문에 상대적으로 더 느리다.
서브쿼리 내부 선택한 컬럼의 어떤(ANY) 최소값보다 비교할 조건절의 컬럼이 더 크면 큰 값을 가진 데이터의 컬럼들의 데이터를 보여준다.
( 여기서는 hiredate 의 최소값보다 큰 hiredate 을 가진 데이터들의 컬럼들의 데이터를 보여주고 있다 )
최소값인 이유는 둘 중 하나만 만족해도 되기 때문이다.
이때 서브쿼리의 min 함수는 사용하지 않아도 된다.
서브쿼리 내부 선택한 컬럼의 어떤(ANY) 최대값보다 비교할 조건절의 컬럼이 더 작으면 작은 값을 가진 데이터의 컬럼들의 데이터를 보여준다.
( 여기서는 hiredate 의 최대값보다 작은 hiredate 을 가진 데이터들의 컬럼들의 데이터를 보여주고 있다 )
최대값인 이유는 둘 중 하나만 만족해도 되기 때문이다.
이때 서브쿼리의 max 함수는 사용하지 않아도 된다.
가령 10,11,12 조건을 만족해야 하는 경우 최대 12보다 큰 데이터인 13부터 나와야 남은 10,11 의 조건들도 자연스럽게 만족한다.
서브쿼리의 조건절의 내용이 모두 해당이 되면 메인쿼리의 선택한 컬럼을 보여준다.
( 여기서는 NEWYORK 에 해당되는 deptno가 1,3 인데 이 두개를 모두 가진 데이터가 없기 때문에 데이터를 보여주지 않는다 )
그래서 ALL을 사용할 때는 조건절의 내용이 하나만 나올 수 있는 걸 써야 한다.
( 여기서는 deptno 1인 sales 를 추가 조건으로 걸어 deptno 1인 사원의 ename,job 이 나오게 하였다. )
서브쿼리 내부 선택한 컬럼의 모든(ALL) 최대값 보다 비교할 조건절의 컬럼이 더 크면 큰 값을 가진 데이터의 컬럼들의 데이터를 보여준다.
( 여기서는 hiredate 의 최대값보다 큰 hiredate 을 가진 데이터들의 컬럼들의 데이터를 보여주고 있다 )
최대값인 이유는 선택한 컬럼의 모든 조건을 만족해야 하기 때문이다.
서브쿼리 내부 선택한 컬럼의 모든(ALL) 최소값보다 비교할 조건절의 컬럼이 더 작으면 작은 값을 가진 데이터의 컬럼들의 데이터를 보여준다.
( 여기서는 hiredate 의 최소값보다 작은 hiredate 을 가진 데이터들의 컬럼들의 데이터를 보여주고 있다 )
최소값인 이유는 선택한 컬럼의 모든 조건을 만족해야 하기 때문이다.
가령 10,11,12 조건을 만족해야 하는 경우 최소 10보다 작은 데이터들이어야 남은 11,12의 조건들도 자연스럽게 만족한다.