PostgreSQL에서 IN
and ANY
연산자 의 차이점은 무엇입니까 ?
두 가지의 작동 메커니즘은 동일한 것 같습니다. 누구든지 예를 들어 설명 할 수 있습니까?
답변
(또한 “연산자” 도 IN
아닙니다 ANY
. “구성”또는 “구문 요소”.)
논리적으로 , 매뉴얼을 인용하면 :
IN
와 동일합니다= ANY
.
그러나 두 가지가 변형 구문 의 IN
와의 두 변종 ANY
. 세부:
IN
복용하는 설정은 동일합니다 = ANY
복용하는 설정을 여기에 입증 된 바와 같이, :
그러나 각각의 두 번째 변형은 서로 동일하지 않습니다. 두번째의 변형 ANY
구조가 얻어 어레이 의 두 번째 변형하면서, (실제 어레이 형이어야) IN
콤마 분리 소요 값리스트 . 값을 전달하고 다른 제한이 리드 할 수 도 특별한 경우 다른 쿼리 계획을 초래할 :
ANY
더 다재다능하다
이 ANY
구조는 .NET뿐만 아니라 다양한 연산자와 결합 할 수 있으므로 훨씬 더 다양 =
합니다. 예:
SELECT 'foo' LIKE ANY('{FOO,bar,%oo%}');
큰 값의 번호, 제공하는 세트 각각에 대해 더 나은 저울 :
관련 :
반전 / 반대 / 배제
” id
주어진 배열에있는 행 찾기 “:
SELECT * FROM tbl WHERE id = ANY (ARRAY[1, 2]);
반전 : “행 찾기 id
입니다 하지 배열을”
SELECT * FROM tbl WHERE id <> ALL (ARRAY[1, 2]);
SELECT * FROM tbl WHERE id <> ALL ('{1, 2}'); -- equivalent array literal
SELECT * FROM tbl WHERE NOT (id = ANY ('{1, 2}'));
세 가지 모두 동일합니다. 첫 번째는 배열 생성자 를 사용하고 다른 두 개는 배열 리터럴을 사용 합니다. 데이터 유형은 컨텍스트에서 명확하게 파생 될 수 있습니다. 그렇지 않으면 '{1,2}'::int[]
.
가있는 행 id IS NULL
은 이러한 표현식 중 하나를 전달하지 않습니다. NULL
값을 추가로 포함하려면 :
SELECT * FROM tbl WHERE (id = ANY ('{1, 2}')) IS NOT TRUE;
답변
두 가지 분명한 점과 다른 답변의 요점이 있습니다.
-
하위 쿼리를 사용할 때 정확히 동일합니다.
SELECT * FROM table WHERE column IN(subquery); SELECT * FROM table WHERE column = ANY(subquery);
반면에 :
-
IN
연산자 만 간단한 목록을 허용합니다.SELECT * FROM table WHERE column IN(… , … , …);
그것들이 똑같다고 가정하면 ANY
목록에서 작동하지 않는 것을 잊었을 때 여러 번 나를 붙 잡았습니다 .