SELECT * FROM emp;
SELECT * FROM dept;
모든 사원 급여 평균보다 급여가 높은 사원의 사번, 이름, 급여를 조회
서브쿼리 사용
SELECT EMPNO, ENAME, SAL
FROM emp
WHERE SAL>(SELECT AVG(SAL) FROM EMP);
WHERE절에 서브쿼리가 있고,
WHERE절에 비교 연산이 '=','>','<'와 같이 크기 비교 연산이라면 서브쿼리의 조회결과 행은 반드시 하나여야 한다.
IN연산자 : OR랑 같음 (SAL = 500 OR SAL = 600 ... )
SELECT EMPNO, ENAME, SAL
FROM emp
WHERE SAL IN (500,600,700);
만약 WHERE절에 서브쿼리의 질의 결과 여러 행의 데이터가 조회되면 IN 연산자를 사용하여 쿼리를 수행할 수 있다.
SELECT EMPNO, ENAME, SAL
FROM emp
WHERE SAL IN (SELECT SAL FROM emp WHERE SAL>500);
WHERE절에 서브쿼리 실행 결과 데이터가 여러 행 조회되면 IN 연산자말고 ALL, ANY 키워드를 사용할 수도 있다.
SELECT EMPNO, ENAME, SAL
FROM emp
WHERE SAL >= ALL (SELECT SAL FROM emp WHERE SAL>500); -- 서브쿼리 : 600,520,1000,560
-- 위의 쿼리와 같음
SELECT EMPNO, ENAME, SAL
FROM emp
WHERE SAL >= (SELECT MAX(SAL) FROM emp WHERE SAL>500);
-- 같..다는데?
SELECT EMPNO, ENAME, SAL
FROM emp
WHERE SAL <= (SELECT MIN(SAL) FROM emp WHERE SAL>500);
SELECT EMPNO, ENAME, SAL
FROM emp
WHERE SAL >= ANY (SELECT SAL FROM emp WHERE SAL>500);
-- 위의 쿼리와 같음
SELECT EMPNO, ENAME, SAL
FROM emp
WHERE SAL >= (SELECT MIN(SAL) FROM emp WHERE SAL>500);