이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 9.25. 행 및 배열 사설 토토버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

9.17. 행과 배열 비교

이 섹션에서는 다음을 위한 몇 가지 특화된 구성을 설명합니다. 값 그룹 간에 다중 비교를 수행합니다. 이러한 양식 구문적으로 이전 하위 쿼리 형식과 관련되어 있습니다. 섹션이지만 하위 쿼리는 포함하지 않습니다. 배열을 포함하는 형태 하위 표현식은 다음과 같습니다.포스트그레SQL확장; 나머지는SQL-호환. 모든 표현 형태 이 섹션에 설명된 내용은 부울(true/false)을 반환합니다. 결과.

9.17.1. IN

표현IN ( [, ...])

오른쪽은 괄호로 묶인 스칼라 목록입니다. 표현. 결과는 다음과 같습니다"사실"만일 왼쪽 표현식의 결과는 다음 중 하나와 같습니다. 오른쪽 표현. 이것은의 약칭 표기법입니다.

표현 = 값1또는표현 = 값2또는
...

왼쪽 표현식이 null을 산출하거나, 동일한 오른쪽 값이 없으며 적어도 하나의 값이 있습니다. 오른쪽 표현식은 null을 생성하며, 결과는IN구성은 false가 아닌 null이 됩니다. 이것은 부울 조합에 대한 SQL의 일반 규칙에 따라 null 값입니다.

9.17.2. 포함되지 않음

표현다음에 없음( [, ...])

오른쪽은 괄호로 묶인 스칼라 목록입니다. 표현. 결과는 다음과 같습니다"사실"만일 왼쪽 표현식의 결과는 모든 표현식과 동일하지 않습니다. 오른쪽 표현. 이것은의 약칭 표기법입니다.

표현 < 값1그리고표현 < 값2그리고
...

왼쪽 표현식이 null을 산출하거나, 동일한 오른쪽 값이 없으며 적어도 하나의 값이 있습니다. 오른쪽 표현식은 null을 생성하며, 결과는포함되지 않음구성은 null이 되며, 하나로서 참이 아닙니다. 순진하게 기대할 수도 있다. 이는 SQL의 일반적인 규칙에 따른 것입니다. Null 값의 부울 조합에 대한 규칙입니다.

팁: x y에 없음이다 에 해당함NOT (x IN y)전체 사례. 그러나 null 값은 넘어질 가능성이 훨씬 더 높습니다. 함께 작업할 때 초보자포함되지 않음함께 일할 때보다IN. 최고야 가능하다면 자신의 상태를 긍정적으로 표현하세요.

9.17.3. 모두/일부(젠 토토)

표현 연산자모두(배열 표현식)
표현 연산자일부 (배열 표현식)

오른쪽은 괄호로 묶인 표현식입니다. 배열 값을 생성해야 합니다. 왼손 표현은 다음을 사용하여 배열의 각 요소를 평가하고 비교합니다. 주어진연산자, 반드시 부울 결과를 산출합니다. 결과는모두is"사실"있는 경우 진정한 결과가 얻어집니다. 결과는 다음과 같습니다"거짓"참된 결과가 발견되지 않은 경우(포함 젠 토토에 요소가 0개인 특별한 경우).

배열 표현식이 null 배열을 생성하는 경우 결과는모두널이 됩니다. 왼손잡이의 경우 표현식은 null을 생성하며 결과는모두일반적으로 null입니다(엄격하지 않지만 비교 연산자를 사용하면 다른 결과가 나올 수도 있습니다.) 또한 오른쪽 배열에 null 요소가 포함되어 있고 진정한 비교 결과가 얻어지고, 결과는모두거짓이 아닌 null이 됩니다(다시 가정하면 엄격한 비교 연산자). 이는 SQL의 Null 값의 부울 조합에 대한 일반 규칙입니다.

일부은의 동의어입니다.모두.

9.17.4. 전체(젠 토토)

표현 연산자전체 (배열 표현식)

오른쪽은 괄호로 묶인 표현식입니다. 배열 값을 생성해야 합니다. 왼손 표현은 다음을 사용하여 배열의 각 요소를 평가하고 비교합니다. 주어진연산자, 반드시 부울 결과를 산출합니다. 결과는전체is"사실"모두라면 비교 결과는 true입니다(특수한 경우 포함). 배열에는 요소가 없습니다). 결과는 다음과 같습니다"거짓"잘못된 결과가 발견된 경우.

배열 표현식이 null 배열을 생성하는 경우 결과는전체널이 됩니다. 왼손잡이의 경우 표현식은 null을 생성하며 결과는전체일반적으로 null입니다(엄격하지 않지만 비교 연산자를 사용하면 다른 결과가 나올 수도 있습니다.) 또한 오른쪽 배열에 null 요소가 포함되어 있고 잘못된 비교 결과가 얻어졌습니다. 결과는전체null이 될 것이며 true가 아닙니다(다시 가정하면 엄격한 비교 연산자). 이는 SQL의 Null 값의 부울 조합에 대한 일반 규칙입니다.

9.17.5. 행별 비교

row_constructor 연산자 row_constructor

각 측면은 다음에 설명된 대로 행 생성자입니다.섹션 4.2.11. 두 행 값의 개수는 동일해야 합니다. 필드. 각 측면이 평가되고 행별로 비교됩니다. 행 비교는 다음과 같은 경우에 허용됩니다.연산자is=, <, <, <=, 또는=또는 의미론은 다음 중 하나와 유사합니다. (구체적으로 말하면 운영자는 B-트리의 구성원인 경우 행 비교 연산자가 될 수 있습니다. 연산자 클래스이거나의 부정자입니다.=B-트리 연산자 클래스의 구성원.)

=그리고<케이스는 다음과 약간 다르게 작동합니다. 다른 사람들. 두 행이 모두 같은 경우 두 행은 동일한 것으로 간주됩니다. 해당 멤버는 null이 아니고 동일합니다. 행은 해당 멤버가 null이 아니고 같지 않으면 같지 않습니다. 그렇지 않으면 행 비교 결과를 알 수 없습니다. (널).

다음을 위해<, <=, 그리고=경우, 행 요소는 다음과 같습니다. 왼쪽에서 오른쪽으로 비교하고 같지 않거나 null이 되면 즉시 중지합니다. 요소 쌍이 발견되었습니다. 이 요소 쌍 중 하나라도 있는 경우 null이면 행 비교 결과를 알 수 없습니다(null). 그렇지 않으면 이 요소 쌍을 비교하여 다음을 결정합니다. 결과. 예를 들어,ROW(1,2,NULL) < 행(1,3,0)세 번째 쌍이 있기 때문에 null이 아닌 true를 반환합니다. 요소는 고려되지 않습니다.

참고:이전PostgreSQL8.2, 그<, <=, 그리고=케이스가 SQL에 따라 처리되지 않았습니다. 사양. 다음과 같은 비교ROW(a,b) < ROW(c,d)다음과 같이 구현되었습니다a < c AND b < d반면 올바른 행동은 다음과 같습니다.a < c OR (a = c AND b < d).

row_constructor다음과 구별됨row_constructor

이 구성은 다음과 유사합니다.<행을 비교했지만 결과가 나오지 않습니다. null 입력의 경우 null입니다. 대신 모든 null 값이 고려됩니다. null이 아닌 값과 같지 않고(구별됨) 두 개 null은 동일한 것으로 간주됩니다(고유하지 않음). 따라서 결과는 항상 참 또는 거짓이어야 하며 절대 null이 아닙니다.

row_constructor다음과 다르지 않습니다row_constructor

이 구성은 다음과 유사합니다.=행 비교이지만 null 입력에 대해서는 null이 생성되지 않습니다. 대신 모든 null 값은 (고유한 from) null이 아닌 모든 값 및 두 개의 null이 고려됩니다. 동일합니다(구별되지 않음). 따라서 결과는 항상 다음 중 하나입니다. 참 또는 거짓이며 절대 null이 아닙니다.