2014-04-29 2 views
1

ANY의 모든 논리 연산자는 직관적으로 의미 세트에 일치 아무것도.카운터 직관적 인 의미는 SQL

x > ANY(...) 값은 목록이 TRUE로 평가 에서 가장 작은 값보다 커야합니다 : 그러나, 나는 두 가지 경우에 예상대로 작동하지 않습니다, 그것을 발견했다.
x < ANY(...) 값은 바꾸어 말하면 TRUE

(Source)

을 평가하기 위해리스트에서 가장 큰 값보다 작아야, ANY 도입 서브 쿼리의 전체 결과이어야 이는 ANY의 의미와 반대 방향으로 실행되는 x과 비교됩니다. 왜 그렇습니까? 또는 나는 단지 의미의 오해가 있습니다. <ANY & >ANY 연산자는 무엇입니까?

+0

'ANY'는 'ANY'로 동작합니다. "그들 중 누구 ..."라고 말할 때 무슨 뜻입니까? "모두"라는 뜻입니까? 또한 [this] (http://www.merriam-webster.com/dictionary/any)를 보아라. –

+0

나에게 그것은 정확한 의미 다.그러나 ANY/ALL을 사용하는 쿼리는 거의 볼 수 없으며 대부분의 DBMS가이를 구현하지 않고보다 읽기 쉬운 쿼리 (IMHO)로 쉽게 다시 작성할 수 있기 때문입니다. 예 : 당신은 "x IN"대신 "x = ANY"를 쓰지 않는다. – dnoeth

+0

당신은'모두'를 사용하고'ALL'의 기능을 기대하고있다. – Serpiton

답변

2

x > ANY(...) 값은 TRUE로 평가하는 목록에서 가장 작은 값보다 커야합니다. x < ANY (...) TRUE로 평가할 값 목록에서 가장 큰 값보다 작아야합니다.

위의 두 문장 모두 oracle이 비교를 위해 사용할 수있는 알고리즘을 표명합니다. 예를 들면. 위의 코드에서

select * from X where id > Any (1 , 2 , 3 , 4 , 5) 

사실을 주장합니다

id > 1 OR id > 2 OR id > 3 and so on.. 

그래서 유일한 ID> 1로 드릴 다운 할 수 있습니다. (Algo Optimization) 그들은 같은 방법으로 x < ANY (...)

1

x > ANY(...) 값은이 결과를 진술한다 TRUE

에 평가 목록에서 가장 작은 값보다 커야합니다. 그것에 대해 생각할 수도 있습니다. x 목록에서보다 큰 모든 값이 될 수 있으며, 그것은 여전히 ​​TRUE를 반환합니다. 반대는 이해하기 쉬울 수 있습니다 : 그것은 또한 목록의 다른 모든 구성원보다 작거나 같아야하기 때문에, 값보다 작거나 목록에서 가장 작은 값과 동일한 경우

x > ANY(...)FALSE 될 것

또는 또 다른 방법 : 목록에서 적어도 하나 개의 값, y 말은 x보다 큰 것으로,이 경우

x > ANY(...) 사실이 될 것입니다. 이러한 y 값 집합이있는 경우 목록에서 가장 작은 값은 논리적으로 해당 집합의 한 구성원이어야합니다.

관련 문제