[DATABASE] IN/SOME/ANY/ALL/EXISTS 함수

@욕심쟁이

·

2020. 11. 18. 09:52

반응형

 ANY/SOM

- ANY/SOME은 IN과는 달리 '=' 이외의 다른 연산자를 활용 할 수 있음.

- ANY/SOME은 기능이 동일

SELECT employee_id, salary
FROM employees
WHERE salary IN (2000, 3000, 4000); -- '='으로만 연산
SELECT employee_id, salary
FROM employees
WHERE salary >= ANY (2000, 3000, 4000);
SELECT employee_id, salary
FROM employees
WHERE salary >= SOME (2000, 3000, 4000);
SELECT employee_id, salary
FROM employees
WHERE salary >= ALL(2000, 3000, 4000)
ORDER BY salary;

EXISTS 함수

- IN 연산자와 유사하게 연산하지만 IN 연산자의 경우 매 행마다 서브쿼리가 새롭게 연산되기 때문에 EXISTS에 비해서 상대적으로 느리다.

SELECT department_id, department_name
FROM departments a
WHERE EXISTS (
    SELECT *
    FROM employees b
    WHERE a.department_id = b.department_id
          AND b.salary > 10000
);
SELECT department_id, department_name
FROM departments a
WHERE department_id IN (
    SELECT department_id
    FROM employees b
    WHERE b.salary > 10000
);

TOP-n 분석

- ROWNUM은 의사컬럼으로 ORDER BY절이 없는 경우 출력되는 컬럼의 순서는 ROWNUM의 값에 따라 출력된다.

SELECT last_name, salary
FROM (
    SELECT last_name, salary
    FROM employees
    ORDER BY salary DESC
)
WHERE ROWNUM <= 5;

 

반응형