매일 1%씩, 개발자로 성장하기

[DB] 다중행연산자 ANY, ALL 비교 본문

Database

[DB] 다중행연산자 ANY, ALL 비교

할미개발 2022. 7. 25. 21:06
728x90

1) ANY, SOME

- 다수의 비교값 혹은 서브쿼리에서 사용하는 다중행 연산자
- 조건을 만족하는 값이 하나라도 있으면 결과 리턴
- IN과 다른점은 비교 연산자를 사용한다는 점 
- OR 연산자로 변경 가능

 

 

[비교 연산자와 ANY]

  • > ANY : 최소값보다 크면
  •  >= ANY : 최소값보다 크거나 같으면
  •  < ANY : 최대값보다 작으면
  • <= ANY : 최대값보다 작거나 같으면
  • = ANY : IN과 같은 기능
  •  != ANY : NOT IN과 같은 기능

 

SELECT DEPTNO
FROM   EMP
WHERE  DEPTNO > ANY (SELECT DEPTNO
                     FROM   EMP
                     WHERE  ENAME = 'JONES');
        
        
SELECT ENAME
FROM   EMP
WHERE  DEPTNO = ANY(100, 10, 20);


SELECT ENAME
FROM   EMP
WHERE  DEPTNO = 100 OR DEPTNO = 10 OR DEPTNO = 20;


SELECT DEPTNO
FROM   EMP
WHERE  DEPTNO > SOME (SELECT DEPTNO
                      FROM   EMP
                      WHERE  ENAME = 'JONES');

 


※ IN 조건과 다른점

 IN : 조건절에서 사용되며 다수의 비교값과 비교하여 비교값 중 하나라도 같은 값이 있으면 TRUE값 리턴

SELECT DEPTNO
FROM   EMP
WHERE  DEPTNO IN(100, 10, 20);

 


2) ALL

- 다수의 비교값 혹은 서브쿼리에서 사용하는 다중행 연산자
- 모든 조건을 만족하는 결과를 리턴
- AND 연산자로 변경 가능

 

 

 [비교 연산자와 ALL]

  • > ALL : 최대값보다 크면
  • >= ALL : 최대값보다 크거나 같으면
  • < ALL : 최소값보다 작으면
  •  <= ALL : 최소값보다 작거나 같으면
  •  = ALL : 서브 쿼리의 결과가 1건이면 괜찮지만 여러 건이면 오류가 발생
  • != ALL : 서브 쿼리의 결과가 1건이면 괜찮지만 여러 건이면 오류가 발생

 

SELECT DEPTNO
FROM   EMP
WHERE  DEPTNO > ALL (SELECT DEPTNO
                     FROM   EMP
                     WHERE  ENAME = 'JONES');
SELECT DEPTNO
FROM   EMP
WHERE  DEPTNO = ALL (SELECT DEPTNO
                     FROM   EMP
                     WHERE  ENAME = 'JONES');
SELECT ENAME
FROM   EMP
WHERE  DEPTNO = ALL(100, 10, 20);

FALSE  : DEPTNO = 100 AND DEPTNO= 10 AND DEPTNO = 200 일치할 수 없기 때문에 

               (DEPTNO가 100인 데이터는 없음)

SELECT ENAME
FROM   EMP
WHERE  DEPTNO > ALL(100, 10, 20);

FALSE : DEPTNO > 100 AND DEPTNO > 10 AND DEPTNO > 200로 일치할 수 없기 때문에 
           

SELECT ENAME
FROM   EMP
WHERE  DEPTNO < ALL(100, 10, 20);

FALSE  : DEPTNO < 100 AND DEPTNO < 10 AND DEPTNO < 200로 일치할 수 없기 때문에 
               (DEPTNO가 10보다 작은 데이터는 없음)

 

 

 

728x90
Comments