SQL

[SQL] ANY

hjkongkong 2025. 7. 17. 16:14

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

 

DEPARTMENT_ID가 없는 데이터가 하나 존재해서 NN 조건 넣음

 

반응형

'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