Перейти к содержимому

Как в sql не равно

  • автор:

Операторы SQL

Операторы SQL используются для указания сравнений между выражениями.

Можно использовать различные типы операторов SQL.

«COSTS».»UNIT_COST» BETWEEN 100.0 AND 5000.0

Определяет, находится ли значение в диапазоне между двумя неинклюзивными ограничениями.

Оператору BETWEEN может предшествовать оператор NOT , отрицающий это условие.

BETWEEN [LowerBound] AND [UpperBound]

«COSTS».»UNIT_COST» IN(200, 600, ‘A’)

Определяет, присутствует ли значение в заданном наборе значений.

IN ([Comma Separated List])

«PRODUCTS».»PROD_NAME» IS NULL

Определяет, является ли значение пустым (null).

«PRODUCTS».»PROD_NAME» LIKE ‘prod%’

Определяет, совпадает ли значение со всей строкой или частью строки. Часто используется со знаками подстановки для указания совпадения с любой строкой, содержащей ноль или более символов (%), а также для указания совпадения с любым одиночным символом (_).

(FEDERAL_REVENUE + LOCAL_REVENUE) — TOTAL_EXPENDITURE

Знак сложения «плюс».

(FEDERAL_REVENUE + LOCAL_REVENUE) — TOTAL_EXPENDITURE

Знак вычитания «минус».

Как в sql не равно

Набор операторов сравнения включает обычные операторы, перечисленные в Таблице 9.1.

Таблица 9.1. Операторы сравнения

Оператор Описание
тип_данных < тип_данных → boolean Меньше
тип_данных > тип_данных → boolean Больше
тип_данных тип_данных → boolean Меньше или равно
тип_данных >= тип_данных → boolean Больше или равно
тип_данных = тип_данных → boolean Равно
тип_данных <> тип_данных → boolean Не равно
тип_данных != тип_данных → boolean Не равно

Примечание

В стандарте SQL для условия « не равно » принята запись <> . Синонимичная ей запись != преобразуется в <> на самой ранней стадии разбора запроса. Как следствие, реализовать операторы != и <> так, чтобы они работали по-разному, невозможно.

Эти операторы сравнения имеются для всех встроенных типов данных, значения которых сортируются естественным образом, включая числовые, строковые типы, а также типы даты/времени. Кроме того, сравниваться могут массивы, составные типы и диапазоны, если типы данных их компонентов являются сравниваемыми.

Обычно можно сравнивать также значения связанных типов данных; например, возможно сравнение integer > bigint . Некоторые подобные операции реализуются непосредственно « межтиповыми » операторами сравнения, но если такого оператора нет, анализатор запроса попытается привести частные типы к более общим и применить подходящий для них оператор сравнения.

Существует также несколько предикатов сравнения; они приведены в Таблице 9.2. Они работают подобно операторам, но имеют особый синтаксис, установленный стандартом SQL.

Таблица 9.2. Предикаты сравнения

тип_данных BETWEEN тип_данных AND тип_данных → boolean

Между (включая границы интервала).

2 BETWEEN 1 AND 3 → t

тип_данных NOT BETWEEN тип_данных AND тип_данных → boolean

Не между (обратное к BETWEEN ).

тип_данных BETWEEN SYMMETRIC тип_данных AND тип_данных → boolean

Между, после сортировки граничных значений.

тип_данных NOT BETWEEN SYMMETRIC тип_данных AND тип_данных → boolean

Не между, после сортировки граничных значений.

тип_данных IS DISTINCT FROM тип_данных → boolean

Не равно, при этом NULL воспринимается как обычное значение.

1 IS DISTINCT FROM NULL → t (а не NULL )

тип_данных IS NOT DISTINCT FROM тип_данных → boolean

Равно, при этом NULL воспринимается как обычное значение.

1 IS NOT DISTINCT FROM NULL → f (а не NULL )

тип_данных IS NULL → boolean

Проверяет, является ли значение эквивалентным NULL.

тип_данных IS NOT NULL → boolean

Проверяет, отличается ли значение от NULL.

тип_данных ISNULL → boolean

тип_данных NOTNULL → boolean

boolean IS TRUE → boolean

Проверяет, является ли результат логического выражения значением true.

true IS TRUE → t

boolean IS NOT TRUE → boolean

Проверяет, является ли результат логического выражения значением false или неизвестным.

true IS NOT TRUE → f

boolean IS FALSE → boolean

Проверяет, является ли результат логического выражения значением false.

true IS FALSE → f

boolean IS NOT FALSE → boolean

Проверяет, является ли результат логического выражения значением true или неизвестным.

true IS NOT FALSE → t

boolean IS UNKNOWN → boolean

Проверяет, является ли результат логического выражения неизвестным значением.

true IS UNKNOWN → f

boolean IS NOT UNKNOWN → boolean

Проверяет, является ли результат логического выражения значением true или false.

true IS NOT UNKNOWN → t

Предикат BETWEEN упрощает проверки интервала:

a BETWEEN x AND y 
a >= x AND a y 

Заметьте, что BETWEEN считает, что границы интервала включаются в интервал. Предикат BETWEEN SYMMETRIC аналогичен BETWEEN , за исключением того, что аргумент слева от AND не обязательно должен быть меньше или равен аргументу справа. Если это не так, аргументы автоматически меняются местами, так что всегда подразумевается непустой интервал.

Различные варианты BETWEEN реализуются посредством обычных операторов сравнения, и поэтому они будут работать с любыми типами данных, которые можно сравнивать.

Примечание

Использование AND в конструкции BETWEEN создаёт неоднозначность с использованием AND в качестве логического оператора. Для её устранения в качестве второго аргумента предложения BETWEEN принимается только ограниченный набор типов выражений. Если вам нужно записать более сложное подвыражение в BETWEEN , заключите это подвыражение в скобки.

Обычные операторы сравнения выдают NULL (что означает « неопределённость » ), а не true или false, когда любое из сравниваемых значений NULL. Например, 7 = NULL выдаёт NULL, так же, как и 7 <> NULL . Когда это поведение нежелательно, можно использовать предикаты IS [ NOT ] DISTINCT FROM :

a IS DISTINCT FROM b a IS NOT DISTINCT FROM b 

Для значений не NULL условие IS DISTINCT FROM работает так же, как оператор <> . Однако если оба сравниваемых значения NULL, результат будет false, и только если одно из значений NULL, возвращается true. Аналогично, условие IS NOT DISTINCT FROM равносильно = для значений не NULL, но возвращает true, если оба сравниваемых значения NULL, и false в противном случае. Таким образом, эти предикаты по сути работают с NULL, как с обычным значением, а не с « неопределённостью » .

Для проверки, содержит ли значение NULL или нет, используются предикаты:

выражение IS NULL выражение IS NOT NULL

или равнозначные (но нестандартные) предикаты:

выражение ISNULL выражение NOTNULL

Заметьте, что проверка выражение = NULL не будет работать, так как NULL считается не « равным » NULL . (Значение NULL представляет неопределённость, и равны ли две неопределённости, тоже не определено.)

Подсказка

Некоторые приложения могут ожидать, что выражение = NULL вернёт true, если результатом выражения является NULL. Такие приложения настоятельно рекомендуется исправить и привести в соответствие со стандартом SQL. Однако в случаях, когда это невозможно, это поведение можно изменить с помощью параметра конфигурации transform_null_equals. Когда этот параметр включён, PostgreSQL преобразует условие x = NULL в x IS NULL .

Если выражение возвращает табличную строку, тогда IS NULL будет истинным, когда само выражение — NULL или все поля строки — NULL, а IS NOT NULL будет истинным, когда само выражение не NULL, и все поля строки так же не NULL. Вследствие такого определения, IS NULL и IS NOT NULL не всегда будут возвращать взаимодополняющие результаты для таких выражений; в частности такие выражения со строками, одни поля которых NULL, а другие не NULL, будут ложными одновременно. В некоторых случаях имеет смысл написать строка IS DISTINCT FROM NULL или строка IS NOT DISTINCT FROM NULL , чтобы просто проверить, равно ли NULL всё значение строки, без каких-либо дополнительных проверок полей строки.

Логические значения можно также проверить с помощью предикатов

логическое_выражение IS TRUE логическое_выражение IS NOT TRUE логическое_выражение IS FALSE логическое_выражение IS NOT FALSE логическое_выражение IS UNKNOWN логическое_выражение IS NOT UNKNOWN

Они всегда возвращают true или false и никогда NULL, даже если какой-любо операнд — NULL. Они интерпретируют значение NULL как « неопределённость » . Заметьте, что IS UNKNOWN и IS NOT UNKNOWN по сути равнозначны IS NULL и IS NOT NULL , соответственно, за исключением того, что выражение может быть только булевого типа.

Также имеется несколько связанных со сравнениями функций; они перечислены в Таблице 9.3.

Таблица 9.3. Функции сравнения

num_nonnulls ( VARIADIC «any» ) → integer

Возвращает число аргументов, отличных от NULL.

num_nulls ( VARIADIC «any» ) → integer

Возвращает число аргументов NULL.

Операторы сравнения MySQL

Операторы сравнения используются в предложении WHERE, чтобы определить, какие записи выбрать. Вот список операторов сравнения, которые вы можете использовать в MySQL:

Операторы сравнения Описание
= Равно
Равно (безопасное сравнение значения NULL)
<>, != Не равно
> Больше, чем
>= Больше или равно
= для проверки равенства в запросе. Оператор может проверять только равенство со значениями, которые не являются NULL.
Например:

FROM contacts
WHERE last_name = ‘Bernard’ ;

В этом примере оператора SELECT, возвращает все строки из таблицы contacts , где last_name равно Bernard.

Пример оператора равенства (безопасный с нулевыми значениями)

Поскольку оператор = только сравнивает значения, отличные от NULL, использовать значения NULL небезопасно. Чтобы преодолеть это ограничение, MySQL добавил оператор , чтобы вы могли проверить равенство как со значениями NULL, так и с не NULL значениями.

Чтобы лучше объяснить разницу между оператором = и оператором , мы будем включать некоторые примеры как с запросами, так и с данными.

Предполагая, что у нас в MySQL есть таблица, называемая contacts , которая заполнена следующими данными:

contact_id last_name site1 site2
1 Arnold alexa.com
2 Gypsie
3 Boyson bing.com bing.com
4 Juan google.ru google.com

Мы могли бы использовать оператор = в следующем запросе:

Не равно (Transact SQL) — традиционный оператор

Сравнивает два выражения (оператор сравнения). При сравнении ненулевых выражений результат принимает значение TRUE, если левый операнд не равен правому, в противном случае результат принимает значение FALSE. Если один или оба операнда имеют значение NULL, см. раздел SET ANSI_NULLS (Transact-SQL).

Синтаксис

expression <> expression 

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

выражение
Любое допустимое выражение expression. Оба выражения должны иметь типы данных, допускающие неявное преобразование. Преобразование зависит от правил приоритетов типов данных.

Типы результата

Boolean

Примеры

А. Использование <> в простом запросе

В следующем примере возвращаются все строки из таблицы Production.ProductCategory , которые содержат значение в ProductCategoryID , равное 3 или 2.

-- Uses AdventureWorks SELECT ProductCategoryID, Name FROM Production.ProductCategory WHERE ProductCategoryID <> 3 AND ProductCategoryID <> 2; 
ProductCategoryID Name ----------------- -------------------------------------------------- 1 Bikes 4 Accessories (2 row(s) affected) 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Luxury Car Rental in Miami | Reserve a Premium Vehicle with RealCar