9.2. 비교 함수 및 연산자#

다음과 같이 일반적인 비교 연산자를 사용할 수 있습니다.표 9.1.

표 9.1. 비교 연산자

운영자 설명
데이터 유형 < 데이터 유형부울 미만
데이터 유형 데이터 유형부울 보다 큼
데이터 유형 <= 데이터 유형부울 보다 작거나 같음
데이터 유형 = 데이터 유형부울 이상
데이터 유형 = 데이터 유형부울 같음
데이터 유형 < 데이터 유형부울 같지 않음
데이터 유형 != 데이터 유형부울 같지 않음

참고

<는에 대한 표준 SQL 표기법입니다.같지 않음. !=별칭은 다음으로 변환됩니다.<파싱의 매우 초기 단계입니다. 따라서 구현이 불가능합니다.!=그리고<다른 작업을 수행하는 연산자.

이러한 비교 연산자는 숫자, 문자열 및 날짜/시간 유형을 포함하여 자연 순서가 있는 모든 내장 데이터 유형에 사용할 수 있습니다. 또한 구성요소 데이터 유형이 비교 가능한 경우 배열, 복합 유형 및 범위를 비교할 수 있습니다.

일반적으로 관련 데이터 유형의 값을 비교하는 것도 가능합니다. 예를 들어정수 비긴트작동합니다. 이러한 종류의 일부 사례는 다음에서 직접 구현됩니다.크로스형롤 토토 연산자. 그러나 그러한 연산자를 사용할 수 없는 경우 파서는 덜 일반적인 유형을 더 일반적인 유형으로 강제 변환하고 후자의 롤 토토 연산자를 적용합니다.

위에 표시된 것처럼 모든 롤 토토 연산자는 유형의 값을 반환하는 이진 연산자입니다.부울. 따라서 다음과 같은 표현은1 < 2 < 3유효하지 않습니다(없기 때문에<부울 값을 비교하는 연산자3). 다음을 사용하세요.사이범위 테스트를 수행하기 위해 아래에 표시된 조건자.

또한 다음과 같이 몇 가지 비교 조건자가 있습니다.표 9.2. 이는 연산자와 매우 유사하게 동작하지만 SQL 표준에서 요구하는 특수 구문이 있습니다.

표 9.2. 비교 술어

술어

설명

데이터 유형 사이 데이터 유형 그리고 데이터 유형부울

사이(범위 끝점 포함).

1과 3 사이의 2t

2 3과 1 사이f

데이터 유형 다음 사이 아님 데이터 유형 그리고 데이터 유형부울

사이에 없음(부정사이).

2 1과 3 사이가 아님f

데이터 유형 대칭 사이 데이터 유형 그리고 데이터 유형부울

사이, 두 끝점 값을 정렬한 후.

2 대칭 3과 1 사이t

데이터 유형 대칭이 아님 데이터 유형 그리고 데이터 유형부울

두 끝점 값을 정렬한 후 사이가 아닙니다.

2 대칭 3과 1 사이가 아님f

데이터 유형 다음과 구별됨 데이터 유형부울

같지 않음, null을 비교 가능한 값으로 처리합니다.

1은 NULL과 구별됩니다.t(대신NULL)

NULL은 NULL과 구별됩니다.f(대신NULL)

데이터 유형 다음과 다르지 않습니다 데이터 유형부울

같음, null을 비교 가능한 값으로 처리합니다.

1은 NULL과 구별되지 않습니다.f(대신NULL)

NULL은 NULL과 구별되지 않습니다.t(대신NULL)

데이터 유형 NULL입니다부울

값이 null인지 테스트합니다.

1.5는 NULL입니다.f

데이터 유형 NULL이 아닙니다부울

값이 null이 아닌지 테스트합니다.

'null'은 NULL이 아닙니다t

데이터 유형 ISNULL부울

값이 null인지 테스트합니다(비표준 구문).

데이터 유형 NOTNULL부울

값이 null이 아닌지 테스트합니다(비표준 구문).

부울 사실입니다부울

부울 표현식이 참인지 테스트합니다.

사실은 사실입니다t

NULL::부울이 TRUE입니다.f(대신NULL)

부울 사실이 아님부울

부울 표현식이 false인지 알 수 없는지 테스트합니다.

사실은 사실이 아님f

NULL::부울은 TRUE가 아닙니다.t(대신NULL)

부울 거짓입니다부울

부울 표현식이 false를 산출하는지 테스트하세요.

참은 거짓입니다f

NULL::부울은 FALSEf(보다는NULL)

부울 거짓이 아닙니다부울

부울 표현식이 참인지 알 수 없는지 테스트합니다.

참은 거짓이 아닙니다t

NULL::부울은 거짓이 아닙니다t(보다는NULL)

부울 알 수 없음부울

부울 표현식이 알 수 없는 결과를 낳는지 테스트합니다.

사실은 알 수 없음f

NULL::부울은 알 수 없음t(대신NULL)

부울 알 수 없는 것이 아님부울

부울 표현식이 참인지 거짓인지 테스트합니다.

사실은 알 수 없음t

NULL::부울은 알 수 없음f(대신NULL)


사이술어는 범위 테스트를 단순화합니다:

a사이x그리고y

다음과 동일함

a=x그리고a<=y

알아두세요사이끝점 값을 범위에 포함된 것으로 처리합니다.대칭 사이다음과 같습니다사이단, 왼쪽에 있는 인수에 대한 요구 사항은 없습니다.그리고오른쪽 인수보다 작거나 같습니다. 그렇지 않은 경우 두 인수가 자동으로 교환되므로 비어 있지 않은 범위가 항상 암시됩니다.

다양한 변종사이일반적인 비교 연산자 측면에서 구현되므로 비교할 수 있는 모든 데이터 유형에 작동합니다.

참고

사용그리고에서사이구문은 다음을 사용하여 모호함을 만듭니다.그리고논리 연산자로. 이 문제를 해결하려면 제한된 표현식 유형 집합만 a의 두 번째 인수로 허용됩니다.사이절. 더 복잡한 하위 표현식을 작성해야 하는 경우사이, 하위 표현식 주위에 괄호를 쓰세요.

일반 롤 토토 연산자는 null을 생성합니다(의미알 수 없음), 입력 중 하나가 null인 경우 true 또는 false가 아닙니다. 예를 들어,7 = NULL그렇듯이 null을 반환합니다7 < NULL. 이 동작이 적합하지 않은 경우에는IS [아님] 다음과 다름술어:

a다음과 구별됨b
a다음과 다르지 않습니다b

널이 아닌 입력의 경우,다음과 구별됨다음과 같습니다<연산자. 그러나 두 입력이 모두 null이면 false를 반환하고, 하나만 null이면 true를 반환합니다. 비슷하게,다음과 다르지 않습니다동일함=null이 아닌 입력의 경우, 두 입력이 모두 null이면 true를 반환하고 입력 하나만 null이면 false를 반환합니다. 따라서 이러한 술어는 null이 아닌 일반 데이터 값인 것처럼 효과적으로 작동합니다.알 수 없음.

값이 null인지 아닌지 확인하려면 조건자를 사용하십시오:

표현NULL입니다표현NULL이 아닙니다

또는 동등하지만 비표준인 술어:

표현ISNULL표현NOTNULL

아님쓰기표현= NULL왜냐하면NULL아닙니다같음 NULL. (null 값은 알 수 없는 값을 나타내며, 알 수 없는 두 값이 같은지 여부는 알 수 없습니다.)

일부 응용프로그램에서는 이를 예상할 수 있습니다.표현= NULL다음의 경우 true를 반환합니다.표현널 값으로 평가됩니다. SQL 표준을 준수하도록 이러한 애플리케이션을 수정하는 것이 좋습니다. 그러나 그렇게 할 수 없는 경우에는transform_null_equals구성 변수를 사용할 수 있습니다. 활성화된 경우,PostgreSQL변환할 것입니다x = NULLx는 NULL입니다..

만약에표현행 값이면NULL입니다행 표현식 자체가 null이거나 행의 모든 ​​필드가 null인 경우 true입니다. 반면NULL이 아닙니다행 표현식 자체가 null이 아니고 모든 행의 필드가 null이 아닌 경우 true입니다. 이러한 행동으로 인해,NULL임그리고NULL이 아닙니다행 값 표현식에 대해 항상 반대 결과를 반환하지는 않습니다. 특히 null 필드와 null이 아닌 필드를 모두 포함하는 행 값 식은 두 테스트 모두에 대해 false를 반환합니다. 예를 들어:

SELECT ROW(1,2.5,'테스트입니다') = ROW(1, 3, '같지 않음');

SELECT ROW(table.*) IS ​​NULL FROM 테이블;  -- 모두 null인 행을 감지합니다.

SELECT ROW(table.*)는 테이블에서 NULL이 아닙니다.  -- null이 아닌 모든 행을 감지합니다.

SELECT NOT(ROW(table.*) IS ​​NOT NULL) FROM TABLE; -- 행에서 하나 이상의 null을 감지합니다.

어떤 경우에는 다음과 같이 작성하는 것이 더 나을 수도 있습니다. NULL과 구별됨또는 NULL과 구별되지 않음, 이는 행 필드에 대한 추가 테스트 없이 전체 행 값이 null인지 여부를 간단히 확인합니다.

부울 값은 조건자를 사용하여 테스트할 수도 있습니다.

boolean_expression사실입니다boolean_expression사실이 아님boolean_expression거짓입니다boolean_expression거짓이 아닙니다boolean_expression알 수 없음boolean_expression알 수 없는 것이 아님

이것은 피연산자가 null인 경우에도 항상 true 또는 false를 반환하며 결코 null 값을 반환하지 않습니다. null 입력은 논리값으로 처리됩니다.알 수 없음. 참고하세요알 수 없음그리고알 수 없는 것이 아님실질적으로 다음과 동일합니다NULL임그리고NULL이 아닙니다, 입력 표현식이 부울 유형이어야 한다는 점을 제외하고 각각.

다음과 같이 일부 비교 관련 기능도 사용할 수 있습니다.표 9.3.

표 9.3. 비교 함수

기능

설명

num_nonnulls ( VARIADIC "아무거나" ) → 정수

널이 아닌 인수의 수를 반환합니다.

num_nonnulls(1, NULL, 2)2

num_nulls ( VARIADIC "아무거나" ) → 정수

널 인수의 수를 반환합니다.

num_nulls(1, NULL, 2)1


수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.