Не равно (Transact SQL) — восклицательный знак
Проверяет неравенство одного выражения другому (оператор сравнения). Если один или оба операнда имеют значение NULL, возвращается значение NULL. Работает так же, как и оператор сравнения <> (не равно).
См. также
Обратная связь
Были ли сведения на этой странице полезными?
Обратная связь
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see: https://aka.ms/ContentUserFeedback.
Отправить и просмотреть отзыв по
Не равно (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)
SELECT — операторы сравнения, логические и специальные.
На предыдущем шаге мы использовали оператор равенства = в предложении WHERE для выбора записей из таблиц. Transact-SQL позволяет строить сложные условия отбора записей и для этого предоставляет операторы отношения, логические операторы и специальные операторы. Операторы отношения это:
- = Равно
- > Больше чем
- Меньше чем
- >= Больше или равно
- Меньше или равно
- Не равно
Предположим, что нам надо увидеть всех заказчиков в рейтингом выше 200:
SELECT * FROM Customers WHERE rating > 200
Результат таков:
CNUM CNAME CITY RATING SNUM ----- --------------------------------- ---------- ------- ----- 2004 Концерн "Дети лейтенанта Шмидта" Бобруйск 300 1002 2008 ОАО "Валют-транзит" Караганда 300 1007
- AND логическое «И»
- OR логическое «ИЛИ»
- NOT логическое отрицание
Использование логических операторов значительно увеличивает возможности команды SELECT. Например, для просмотра заказчиков из Караганды, которые имеют рейтинг выше 200 достаточно команды:
SELECT * FROM Customers WHERE city = 'Караганда' AND rating > 200
В нашей БД имеется только один заказчик, удовлетворяющий этому условию.
CNUM CNAME CITY RATING SNUM ----- --------------------------------- ---------- ------- ----- 2008 ОАО "Валют-транзит" Караганда 300 1007
Если использовать OR, то получим всех заказчиков, находящихся в Караганде или имеющих рейтинг выше 200:
SELECT * FROM Customers WHERE city = 'Караганда' OR rating > 200
Результат запроса:
CNUM CNAME CITY RATING SNUM ----- --------------------------------- ---------- ------- ----- 2004 Концерн "Дети лейтенанта Шмидта" Бобруйск 300 1002 2008 ОАО "Валют-транзит" Караганда 300 1007
NOT используется для инвертирования значений. Запрос:
SELECT * FROM Customers WHERE city = "Караганда" OR NOT rating > 200
CNUM CNAME CITY RATING SNUM ----- -------------------- --------- ------- ------ 2001 ТОО Рога и копыта Москва 100 1001 2002 AО Бендер и К Одесса 200 1003 2003 Фирма ХХХ Рязань 200 1002 2006 Clemens Лондон 100 1001 2007 ОАО "ООО" ТОМСК 100 1004 2008 ОАО "Валют-транзит" Караганда 300 1007
Для группировки выражений Transact-SQL позволяет использовать круглые скобки ( ). Например:
SELECT * FROM Customers WHERE NOT (city = 'Караганда' OR rating > 200)
Этот запрос отбирает заказчиков, которые НЕ находятся в Караганде или НЕ имеют рейтинг больше 200. Результат:
CNUM CNAME CITY RATING SNUM ----- ------------------ ------- ------- ----- 2001 ТОО Рога и копыта Москва 100 1001 2002 AО Бендер и К Одесса 200 1003 2003 Фирма ХХХ Рязань 200 1002 2006 Clemens Лондон 100 1001 2007 ОАО "ООО" ТОМСК 100 1004
Рассмотрим теперь специальные операторы: IN, BETWEEN, LIKE, IS NULL.
Оператор IN определяет список значений, в который должно входить значение поля. Например, если Вы хотите найти всех продавцов находящихся в Москве или Хабаровске, Вы должны использовать такой запрос:
SELECT * FROM Salespeople WHERE city = 'Москва' OR city = 'Хабаровск'
Но есть есть более простой способ:
SELECT * FROM Salespeople WHERE city IN ( 'Москва', 'Хабаровск' )
Результат этого запроса:
SNUM SNAME CITY COMM ----- ------- ---------- ----- 1001 Иванов Москва 12.0 1002 Петров Хабаровск 13.0
Набор значений для оператора IN заключается в круглые скобки, значения разделяются запятыми.
Оператор BETWEEN похож на оператор IN. В отличие от списка допустимых значений BETWEEN определяет диапазон значений. В запросе Вы должны указать слово BETWEEN затем начальное значение, ключевое слово AND и конечное значение. Первое значение должно быть меньше второго. Следующий запрос выберет Агентов с комиссионными между 10 и 12:
SELECT * FROM Salespeople WHERE comm BETWEEN 10 AND 12
SNUM SNAME CITY COMM ----- -------- ---------- ----- 1001 Иванов Москва 12.0 1003 Егоров Караганда 10.0 1004 Сидоров Сочи 11.0
Оператор LIKE применим только к символьным полям, с которыми он используется, чтобы находить подстроки. Т.е. он ищет поле символа, чтобы видеть совпадает ли с условием часть его строки. В качестве условия он использует специальные символы:
- символ подчеркивания _ — замещает любой одиночный символ. Например, ‘к_т’ будет соответствовать ‘кот’ и ‘кит’, но не ‘крот’.
- знак процента % — замещает последовательность любого числа символов. Например, ‘%м%р’ будет соответствовать ‘компьютер’ и ‘омар’.
SELECT * FROM Customers WHERE cname LIKE 'О%'
CNUM CNAME CITY RATING SNUM ----- -------------------- ---------- ------- ----- 2008 ОАО "Валют-транзит" Караганда 300 1007 2007 ОАО "ООО" ТОМСК 100 1004
LIKE удобен поиске значений, если Вы точно не помните как они пишутся. Вы просто можете использовать ту часть, которую помните.
Так как NULL указывает на отсутствие значения Вы не можете знать каков бужет результат любого сравнения с NULL. Часто Вам различать строки, содержащие значения NULL в каком-либо столбце. Для этого существует специальный оператор IS NULL. Выберем из нашей БД заказчиков с NULL значениями в столбце city:
SELECT * FROM Customers WHERE city IS NULL
В БД таких записей нет, но они могут возникнуть при добавлении нового заказчика без прикрепления к нему агента.
Теперь Вы знаете как можно строить запросы к таблицам, используя любые условия. Далее следует: агрегатные функции и просто функции, GROUP BY,ORDER BY.
«Не равно» в SQL: синтаксис и применение в условии WHERE
Неравенство в SQL обозначается операторами <> или != , расположенными в предложении WHERE . Вот пример их использования:
Скопировать код
SELECT * FROM your_table WHERE your_column <> 'desired_value';
Этот запрос вернёт все строки, в которых значение в столбце your_column отличается от ‘desired_value’.
Борьба с NULL-значением
Значение NULL в SQL не равносильно ни одному другому, даже самому себе. Если NULL присутствует в данных, операторы <> или != работают весьма необычным образом. Чтобы справиться с этой проблемой, добавьте условие проверки на NULL :
Скопировать код
SELECT * FROM your_table WHERE your_column <> 'desired_value' OR your_column IS NULL;
Такая конструкция позволит отобрать записи, в которых your_column не равен ‘desired_value’ или содержит NULL .
Ловушки оператора NOT IN
Оператор NOT IN может быть удобен для сравнения сразу с несколькими значениями, однако будьте осторожны! NULL в подзапросе может вызвать проблемы:
Скопировать код
SELECT * FROM your_table WHERE your_column NOT IN (SELECT possible_value FROM other_table);
Если столбец possible_value таблицы other_table содержит NULL , ваш запрос не вернёт никакой результат. В таких случаях предпочтительнее использовать NOT EXISTS .
Визуализация
Представьте себе, что вы идете за покупками со списком:
Скопировать код
Ваш список покупок: [, , , ]
Скопировать код
SELECT item FROM shopping_list WHERE item != ''; -- К сожалению, без хлеба.
Что окажется в вашей корзине?
Скопировать код
Корзина: [, , ] -- Все необходимое куплено!
Оператор != фильтрует товары, которые вам сегодня не нужны, хотя он не виден в визуальном отображении.
ANSI против других: битва за совместимость
В вопросе выражения неравенства возникает конфликт между <> , стандартом ANSI SQL, и != , вариантом, популярным во многих СУБД. Проверяйте их совместимость с платформой, которую вы выбрали:
Скопировать код
-- Стандарт ANSI SQL SELECT * FROM your_table WHERE your_column <> 'value'; -- "Будь вежлив и держи дистанцию!" SELECT * FROM your_table WHERE your_column != 'value'; -- "Я тоже могу!"
Стремитесь к написанию кроссплатформенного кода, чтобы избежать проблем при переходе между такими СУБД, как MySQL, PostgreSQL и SQL Server.
Будьте аккуратны при удалении данных, иначе можно потерять всё навсегда
Команда DELETE с условием неравенства может быть опасной — данные удалены без возможности восстановления:
Скопировать код
-- Моментальное удаление строк DELETE FROM your_table WHERE your_column <> 'value_to_keep'; -- "До свидания, будь здоров!"
Перед выполнением такой операции не забывайте делать резервные копии.
Не забывайте об оптимизации производительности
Использование отрицания в WHERE может снизить производительность, особенно в больших базах данных. Тестируйте запросы и оптимизируйте их; применяйте индексацию к ключевым столбцам для ускорения их обработки.
Вовремя исправленный код может спасти вашу базу данных
Следуя проверенным практикам, ваш SQL-код будет надежным и понятным:
- Обрабатывайте NULL явно.
- Добавляйте комментарии к коду для удобства его поддержки и понимания.
- Не забывайте о тестировании: каждый кейс требует индивидуального подхода!