[MySQL] 서브쿼리, IN, ALL, ANY

펭귄안녕·2024년 10월 16일
0

MySQL

목록 보기
5/6
post-thumbnail
SELECT * FROM emp;
SELECT * FROM dept;

서브쿼리

모든 사원 급여 평균보다 급여가 높은 사원의 사번, 이름, 급여를 조회
서브쿼리 사용

SELECT EMPNO, ENAME, SAL
FROM emp
WHERE SAL>(SELECT AVG(SAL) FROM EMP);

WHERE절에 서브쿼리가 있고,
WHERE절에 비교 연산이 '=','>','<'와 같이 크기 비교 연산이라면 서브쿼리의 조회결과 행은 반드시 하나여야 한다.

IN연산자

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);

ALL, ANY

WHERE절에 서브쿼리 실행 결과 데이터가 여러 행 조회되면 IN 연산자말고 ALL, ANY 키워드를 사용할 수도 있다.

  • ALL : 서브쿼리 질의 결과 모든 데이터가 전부 조건에 만족하는 결과만 조회
    최댓값의 조건이 만족하면 조회
    서브쿼리에서 조회된 결과보다 높은 것을 조회하겠다..?
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);
  • ANY : 서브쿼리 질의 결과 조회되는 데이터 중 하나라도 조건에 성립되면 조회
    최솟값의 조건이 만족하면 조회
    =ANY : IN과 같음
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);

0개의 댓글