이 섹션에서는 값 그룹 간의 다중 비교를 수행하기 위한 몇 가지 특수한 구성을 설명합니다. 이러한 형식은 이전 섹션의 하위 쿼리 형식과 구문적으로 관련되어 있지만 하위 쿼리를 포함하지는 않습니다. 배열 하위 표현식과 관련된 형식은 다음과 같습니다.PostgreSQL확장; 나머지는SQL-호환. 이 섹션에 설명된 모든 표현식 형식은 부울(true/false) 결과를 반환합니다.
IN #표현IN (값[, ...])
오른쪽은 괄호로 묶인 표현식 목록입니다. 결과는 다음과 같습니다“참”왼쪽 표현식의 결과가 오른쪽 표현식 중 하나와 같은 경우. 이것은의 약칭 표기법입니다.
표현=값1또는표현=값2또는 ...
왼쪽 표현식이 null을 생성하거나 동일한 오른쪽 값이 없고 적어도 하나의 오른쪽 표현식이 null을 생성하는 경우 다음의 결과에 유의하세요.IN구성은 false가 아닌 null이 됩니다. 이는 null 값의 부울 조합에 대한 SQL의 일반 규칙을 따릅니다.
포함되지 않음 #표현다음에 없음(값[, ...])
오른쪽은 괄호로 묶인 표현식 목록입니다. 결과는 다음과 같습니다“참”왼쪽 표현식의 결과가 모든 오른쪽 표현식과 같지 않은 경우. 이것은의 약칭 표기법입니다.
표현<값1그리고표현<값2그리고 ...
왼쪽 표현식이 null을 생성하거나 동일한 오른쪽 값이 없고 적어도 하나의 오른쪽 표현식이 null을 생성하는 경우, 다음의 결과에 유의하세요.포함되지 않음구조는 null이 될 것이며 순진하게 예상할 수 있는 사실이 아닙니다. 이는 null 값의 부울 조합에 대한 SQL의 일반 규칙을 따릅니다.
x y에 없음다음과 동일함NOT (x IN y)모든 경우에. 그러나 null 값은 작업할 때 초보자를 혼란에 빠뜨릴 가능성이 훨씬 더 높습니다.포함되지 않음작업할 때보다IN. 가능하다면 자신의 상태를 긍정적으로 표현하는 것이 가장 좋습니다.
모두/일부(배열)#표현연산자모두(배열 표현식)표현연산자일부 (배열 표현식)
오른쪽은 배열 값을 산출해야 하는 괄호로 묶인 표현식입니다. 왼쪽 표현식은 주어진를 사용하여 배열의 각 요소와 평가되고 비교됩니다.연산자, 부울 결과를 생성해야 합니다. 결과는모두is“참”참된 결과가 얻어지면. 결과는 다음과 같습니다“거짓”실제 결과가 발견되지 않은 경우(배열에 요소가 0개인 경우 포함).
배열 표현식이 null 배열을 생성하는 경우, 결과는모두널이 됩니다. 왼쪽 표현식이 null을 생성하는 경우, 결과는모두는 일반적으로 null입니다(단, 엄격하지 않은 비교 연산자는 다른 결과를 산출할 수도 있음). 또한 오른쪽 배열에 null 요소가 포함되어 있고 실제 비교 결과가 얻어지지 않은 경우, 다음의 결과는모두거짓이 아닌 null이 됩니다(다시 엄격한 비교 연산자를 가정). 이는 null 값의 부울 조합에 대한 SQL의 일반 규칙을 따릅니다.
일부는의 동의어입니다.모두.
전체(배열)#표현연산자전체 (배열 표현식)
오른쪽은 배열 값을 산출해야 하는 괄호로 묶인 표현식입니다. 왼쪽 표현식은 주어진를 사용하여 배열의 각 요소와 평가되고 비교됩니다.연산자, 부울 결과를 생성해야 합니다. 결과는전체is“참”모든 비교 결과가 true인 경우(배열에 0개의 요소가 있는 경우 포함). 결과는 다음과 같습니다“거짓”잘못된 결과가 발견된 경우.
배열 표현식이 null 배열을 생성하는 경우, 결과는전체null이 됩니다. 왼쪽 표현식이 null을 생성하는 경우, 결과는전체는 일반적으로 null입니다(엄격하지 않은 비교 연산자를 사용하면 다른 결과가 나올 수도 있음). 또한 오른쪽 배열에 null 요소가 포함되어 있고 잘못된 비교 결과가 얻어지지 않은 경우, 다음의 결과는전체은 true가 아닌 null이 됩니다(다시 말하지만, 엄격한 비교 연산자를 가정함). 이는 null 값의 부울 조합에 대한 SQL의 일반 규칙을 따릅니다.
row_constructor연산자row_constructor
각 측면은 다음에 설명된 대로 행 생성자입니다.섹션 4.2.13. 두 개의 행 생성자에는 동일한 수의 필드가 있어야 합니다. 주어진연산자은 해당 필드의 각 쌍에 적용됩니다. (필드의 유형이 다를 수 있으므로 이는 각 쌍에 대해 서로 다른 특정 연산자를 선택할 수 있음을 의미합니다.) 선택된 모든 연산자는 일부 B-트리 연산자 클래스의 멤버이거나=B-트리 연산자 클래스의 멤버. 즉, 행 생성자 비교는 다음 경우에만 가능함을 의미합니다.연산자is=, <, <, <=, , 또는=또는 다음 중 하나와 유사한 의미를 갖습니다.
그=그리고<사례는 다른 사례와 약간 다르게 작동합니다. 해당하는 모든 멤버가 null이 아니고 동일한 경우 두 행은 동일한 것으로 간주됩니다. 해당 멤버가 null이 아니고 동일하지 않은 경우 행은 동일하지 않습니다. 그렇지 않으면 행 토토 결과를 알 수 없습니다(null).
다음을 위해<, <=, 그리고=경우, 행 요소는 왼쪽에서 오른쪽으로 토토되며, 같지 않거나 null 요소 쌍이 발견되는 즉시 중지됩니다. 이 요소 쌍 중 하나라도 널인 경우 행 토토 결과는 알 수 없습니다(널). 그렇지 않으면 이 요소 쌍의 토토에 따라 결과가 결정됩니다. 예를 들어,ROW(1,2,NULL) < ROW(1,3,0)요소의 세 번째 쌍은 고려되지 않기 때문에 null이 아닌 true를 반환합니다.
row_constructor다음과 구별됨row_constructor
이 구성은 다음과 유사합니다.<행 비교이지만 null 입력에 대해서는 null이 생성되지 않습니다. 대신, 모든 Null 값은 Null이 아닌 값과 같지 않은(구별되지 않는) 것으로 간주되며, 두 개의 Null은 동일한(구별되지 않는) 것으로 간주됩니다. 따라서 결과는 true 또는 false가 되며 결코 null이 아닙니다.
row_constructor다음과 다르지 않습니다row_constructor
이 구성은 다음과 유사합니다.=행 비교이지만 null 입력에 대해서는 null이 생성되지 않습니다. 대신, 모든 Null 값은 Null이 아닌 값과 같지 않은(구별되지 않는) 것으로 간주되며, 두 개의 Null은 동일한(구별되지 않는) 것으로 간주됩니다. 따라서 결과는 항상 참 또는 거짓이 되며 결코 null이 되지 않습니다.
기록연산자기록
SQL 사양에서는 결과가 두 개의 NULL 값 또는 NULL과 NULL이 아닌 값의 비교에 따라 달라지는 경우 NULL을 반환하기 위해 행별 비교가 필요합니다.포스트그레SQL두 행 생성자의 결과를 토토할 때만 이 작업을 수행합니다(예:섹션 9.25.5) 또는 행 생성자를 하위 쿼리의 출력과 비교합니다(예:PostgreSQL : 문서 : 17 : 9.24. 하위 토토 커뮤니티 표현). 두 개의 복합 유형 값을 토토하는 다른 컨텍스트에서는 두 개의 NULL 필드 값이 동일한 것으로 간주되고 NULL은 NULL이 아닌 필드 값보다 큰 것으로 간주됩니다. 이는 복합 유형에 대해 일관된 정렬 및 색인 생성 동작을 유지하기 위해 필요합니다.
각 측면이 평가되고 행별로 비교됩니다. 복합 유형 비교는 다음과 같은 경우에 허용됩니다.연산자is=, <, <, <=, 또는=또는 다음 중 하나와 유사한 의미를 갖습니다. (구체적으로 말하자면, 연산자는 B-트리 연산자 클래스의 멤버이거나 B-트리 연산자 클래스의 부정자인 경우 행 비교 연산자가 될 수 있습니다.=B-트리 연산자 클래스의 멤버.) 위 연산자의 기본 동작은 for와 동일합니다.다음과 [ 아님 ] 구별됨행 생성자의 경우(참조섹션 9.25.5).
기본 B-트리 연산자 클래스가 없는 요소를 포함하는 행의 일치를 지원하기 위해 복합 유형 비교를 위해 다음 연산자가 정의됩니다:*=, *<, *<, *<=, *및*=. 이 연산자는 두 행의 내부 이진 표현을 비교합니다. 두 행을 같음 연산자로 비교한 결과가 참이더라도 두 행은 서로 다른 이진 표현을 가질 수 있습니다. 이러한 비교 연산자 아래의 행 순서는 결정적이지만 달리 의미가 없습니다. 이러한 연산자는 구체화된 뷰에 대해 내부적으로 사용되며 복제 및 B-트리 중복 제거와 같은 다른 특수 목적에 유용할 수 있습니다(참조)섹션 64.1.4.3). 그러나 일반적으로 쿼리 작성에 유용하지는 않습니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.