Postgre의 IN 대 ANY 연산자SQL
사이의 차이점은 무엇입니까?IN
그리고.ANY
PostgreSQL의 연산자?
두 가지의 작동 메커니즘은 동일한 것으로 보입니다.이것을 예를 들어 설명할 수 있는 사람이 있습니까?
(엄밀히 말하면,IN
그리고.ANY
Postgres는 "연산자"가 아닌 "구문" 또는 "구문 요소"입니다.)
논리적으로 설명서를 인용합니다.
IN
와 동등합니다.= ANY
.
하지만 두 가지 구문 변형이 있습니다.IN
그리고 두 가지 변형의ANY
.세부사항:
IN
한 세트를 가져가는 것은= ANY
여기에 설명된 것처럼 세트를 취합니다.
하지만 각각의 두 번째 변종은 미묘하게 다릅니다.두 번째 변형 모델은ANY
구성은 배열(실제 배열 유형이어야 함)을 사용하는 반면, 두 번째 변형은IN
쉼표로 구분된 값 목록을 사용합니다.이로 인해 전달 값이 서로 다른 제한을 받게 되며 특별한 경우에는 다음과 같은 쿼리 계획이 서로 다를 수도 있습니다.
ANY
보다 다양한 용도로 사용
그ANY
구성은 단순한 것이 아니라 다양한 연산자와 결합될 수 있기 때문에 훨씬 더 다용도입니다.=
예:
SELECT 'foo' LIKE ANY('{FOO,bar,%oo%}');
많은 값의 경우 각 값에 대해 더 나은 스케일을 제공합니다.
관련:
반전/반대/제외
"행 찾기 위치id
지정된 배열에 있음":
SELECT * FROM tbl WHERE id = ANY (ARRAY[1, 2]);
반전: "열에 없는 행 찾기":
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}'));
세 가지 모두 동등합니다.첫 번째는 어레이 생성자를 사용하고 나머지 두 개는 어레이 리터럴을 사용합니다.입력되지 않은 배열 리터럴의 유형은 왼쪽에 있는 (알려진) 요소 유형에서 파생됩니다.
다른 별자리(입력한 배열 값 / 기본이 아닌 유형에 대해 다른 유형 / 배열 생성자를 원하는 경우)에서는 명시적으로 캐스트해야 할 수 있습니다.
의 행은 이러한 식을 모두 전달하지 않습니다.포함하기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
목록에서 작동하지 않습니다.
'in'
구문은 설탕입니다. 계획 분석을 검토할 수 있으며 '에서'를 확인할 수 있습니다.'
으로 됩니다.=ANY('...,...')::yourType[]
언급URL : https://stackoverflow.com/questions/34627026/in-vs-any-operator-in-postgresql
'programing' 카테고리의 다른 글
Oracle SQL 개발자:실패 - 테스트 실패:네트워크 어댑터에서 연결을 설정할 수 없습니까? (0) | 2023.06.10 |
---|---|
겉보기에 올바른 .NET 코드가 컴파일되지 않는 이유는 무엇입니까? (0) | 2023.06.10 |
Eclipse C++ : "PATH에서 프로그램 "g++"을 찾을 수 없습니다." (0) | 2023.06.10 |
유형 오류: firebase.storage가 기능하지 않습니다. (0) | 2023.06.10 |
다중 열 쿼리의 한 열에 고유한 값을 가져오는 Oracle 11g SQL (0) | 2023.06.10 |