본문 바로가기
프로그래밍/sql Tip

IN, ANY, ALL 설명

by 카라미 2015. 4. 22.

1. IN 
- 조건절에서 사용하며 다수의 비교값과 비교하여 비교값 중 하나라도 같은 값이 있다면 true 이다.



SELECT * FROM emp WHERE sal IN(950, 3000, 1250);

- 'sal = 950 OR sal = 3000 OR sal = 1250' 

- 950, 3000, 1250 과 동일한 값은 모두 출력한다.

2. ANY
- 다수의 비교값 중 한개라도 만족하면 true 이다.
- IN  과 다른점은 비교 연산자를 사용한다는 점이다.

1
SELECT * FROM emp WHERE sal =ANY(950, 3000, 1250)

- 이 문장은 위의 IN의 결과와 같다. "=" 연산자는 비교 값과 같은 값은 모두 출력하게 된다.

- 'sal = 950 OR sal = 3000 OR sal = 1250'  와 동일하다. 


1
SELECT * FROM emp WHERE sal >ANY(950, 3000, 1250)

- 이 문장은 ">"연산자를 사용했다. 이 쿼리의 결과는 950보다 큰 값은 모두 출력하게 된다.

- 'sal > 950 OR sal > 3000 OR sal > 1250'  와 동일하다. 


1
SELECT * FROM emp WHERE sal <ANY(950, 3000, 1250)

- 이 문장은 "<" 연산자를 사용했다. 이 쿼리의 결과는 3000보다 작은 값은 모두 출력하게 된다.

- 'sal < 950 OR sal < 3000 OR sal < 1250'  와  동일하다. 

결국 ANY는 나올 수 있는 모든 조건에 OR 연산을 수행한것과 동일한 결과를 얻는다.  

3. ALL
- 전체 값을 비교하여 모두 만족해야만 true 이다.

1
SELECT * FROM emp WHERE sal =ALL(950, 3000, 1250)

- 결과가 하나도 없다. 하나의 값이 모든 값과 일치 할 수 없기 때문이다.

- 'sal = 950 AND sal = 3000 AND sal = 1250' 

1
SELECT * FROM emp WHERE sal>ALL(950, 3000, 1250)


- 3000보다 큰 값만 표시된다. 'sal > 950 AND sal > 3000 AND sal > 1250' 과 동일하다.


1
SELECT * FROM emp WHERE sal <font color="#e31600"><</font> ALL(950, 3000, 1250)

- 950보다 작은 값만 표시된다. 'sal < 950 AND sal < 3000 AND sal < 1250' 과 동일하다.

결국 ALL은  나올 수 있는 모든 조건에 AND 연산을 수행한것과 동일한 결과를 얻는다.  



정리하자면..... 




비교 연산자와 ANY


최소한 하나라도 만족하는 것  


> ANY : 최소값 보다 크면


>= ANY : 최소값보다 크거나 같으면


< ANY : 최대값보다 작으면


<= ANY : 최대값보다 작거나 같으면


= ANY : IN과 같은 효과


!= ANY : NOT IN과 같은 효과


비교 연산자와 ALL


ANY와는 반대되는 개념입니다. 모든 조건에 만족 되는것 


> ALL : 최대값 보다 크면


>= ALL : 최대값보다 크거나 같으면


< ALL : 최소값보다 작으면


<= ALL : 최소값보다 작거나 같으면


= ALL : SUBSELECT의 결과가 1건이면 상관없지만 여러 건이면 오류가 발생합니다.


!= ALL : 위와 마찬가지로 SUBSELECT의 결과가 여러 건이면 오류가 발생합니다.