13.2.10.3 ANY, IN 또는 SOME을 사용한 서브 쿼리
구문 :
operand
comparison_operator
ANY ( subquery
) operand
IN ( subquery
) operand
comparison_operator
SOME ( subquery
)
여기에서 comparison_operator
는 다음 연산자 중 하나입니다.
=> <> = <= <>! =
ANY
키워드 (이것은 비교 연산자 다음에 지정해야합니다)는 "이 서브 쿼리가 반환 컬럼의 값 ANY
(중)에 대해 비교가 TRUE
이면 TRUE
를 돌려 준다」을 나타냅니다. 예 :
SELECT s1 FROM t1 WHERE s1> ANY (SELECT s1 FROM t2);
테이블 t1
에 (10)
를 포함한 행이 존재한다고합니다. 테이블 t2
에 (21,14,7)
이 포함되어있는 경우, t2
는 10
보다 작은 값 7
이 존재하기 때문에이 수식은 TRUE
입니다. 테이블 t2
에 (20,10)
이 포함되어있는 경우 또는 테이블 t2
가 비어있는 경우,이 식은 FALSE
입니다. 테이블 t2
에 (NULL,NULL,NULL)
이 포함되어있는 경우,이 식은 불명 (즉, NULL
)입니다.
서브 쿼리로 사용되는 경우 워드 IN
은 = ANY
의 별칭입니다. 따라서 다음 두 명령문은 동일합니다.
SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);
식 목록에서 사용되는 경우 IN
과 = ANY
는 동의어가 없습니다. IN
은 식 목록을 가져올 수 있지만 = ANY
수 없습니다. 섹션 12.3.2 "비교 함수와 연산자" 를 참조하십시오.
NOT IN
은 <> ANY
대신 <> ALL
의 별칭입니다. 섹션 13.2.10.4 "ALL을 사용한 서브 쿼리" 를 참조하십시오.
워드 SOME
은 ANY
의 별칭입니다. 따라서 다음 두 명령문은 동일합니다.
SELECT s1 FROM t1 WHERE s1 <> ANY (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 <> SOME (SELECT s1 FROM t2);
워드 SOME
은 거의 사용되지 않지만,이 예제는 이것이 왜 도움이 될 수 있는지를 보여줍니다. 대부분의 사람들에게 'a is not equal to any b "(a 어떤 b도 동일하지 않다)라는 영어 문구는"there is no b which is equal to a "(a 평등 b는 존재하지 않는다)를 입니다하지만이 SQL 구문이 나타내는 내용과는 다릅니다. 이 구문은 "there is some b to which a is not equal"(a 같지 않음 b가 일부 존재)를 보여줍니다. 대신 <> SOME
을 사용하여이 쿼리의 진정한 의미가 모든 사람에게 이해되도록하는 데 도움이됩니다.