# ANY : 서브쿼리 결과 중 하나만 만족하면 TRUE 반환

--ANY
SELECT EMP_NAME, EMPLOYEE_ID FROM employees
WHERE EMPLOYEE_ID = ANY (101, 104,203,401);
-- IN과 같은 결과값을 낸다
SELECT EMP_NAME, EMPLOYEE_ID FROM employees
WHERE EMPLOYEE_ID IN (101, 104,203,401);
** IN과 ANY의 차이는 무엇일까?
요약 : IN은 목록안에 있는 항목과 정확히 일치하면 TRUE 반환,
ANY는 주로 비교연산자와 함께 사용되며, 서브쿼리 결과 중 하나만 만족하면 TRUE 반환
| 항목 | IN | ANY |
| 비교 대상 | 정적인 값 목록 또는 서브쿼리 결과 | 서브쿼리 결과 |
| 사용되는 연산자 | = | =, >, <, >=, <=, <> 등.. |
| 의미 | 목록에 포함되어 있으면 TRUE | 서브쿼리 결과 중 하나라도 조건을 만족하면 TRUE |
| 예시 | X IN (1, 2, 3) | x > ANY (SELECT y FROM table) |
ANY만 할 수 있는 예시
-- DEPT_HEAD는 각 부서장 정보가 있는 테이블
-- 부서장보다 급여를 많이 받는 사원 명단 추출
SELECT EMP_NAME, EMPLOYEE_ID, SALARY FROM EMPLOYEES
WHERE SALARY > ANY(SELECT SALARY FROM DEPT_HEAD);

※ 참고 ※ 부서장 테이블 만드는 과정
-- 부서에서 급여를 제일 많이 받는 사람들을 부서장이라 하자
-- 만일 한 부서에서 여러명이라면 먼저 들어온 사람
-- 부서장 테이블 생성
CREATE TABLE DEPT_HEAD AS
SELECT EMP_NAME, EMPLOYEE_ID, SALARY, DEPARTMENT_ID, HIRE_DATE
FROM (
SELECT EMP_NAME, EMPLOYEE_ID, SALARY, DEPARTMENT_ID, HIRE_DATE,
ROW_NUMBER() OVER (
PARTITION BY DEPARTMENT_ID
ORDER BY SALARY DESC, HIRE_DATE ASC
) AS RN
FROM EMPLOYEES
)
WHERE RN = 1 ;

반응형
'SQL' 카테고리의 다른 글
| [SQL] SUB-QUERY 서브쿼리 (1) | 2025.07.18 |
|---|---|
| [SQL] JOIN 조인 (1) | 2025.07.18 |
| [SQL] GROUP BY, HAVING, ROLLUP, GROUPING SETS (0) | 2025.07.17 |
| [ORACLE] 문자함수 (0) | 2025.07.16 |
| [ORACLE] 다중 INSERT (0) | 2025.07.16 |