В SQL операторът не е равен на (!=
) сравнява неравенството на два израза. Тоест, тества дали един израз не равно на друг израз.
Ако единият или и двата операнда са NULL
, NULL
се връща.
SQL също има друг оператор, който не е равен на (<>
), което прави същото. Коя от тях ще използвате може да зависи от вашата СУБД, коя ви е най-удобно да използвате и може би също така дали вашата организация има някакви конвенции за кодиране, които диктуват коя трябва да се използва.
Изходна таблица
Представете си, че нашата база данни съдържа следната таблица. Това е таблицата, която ще използваме за примерите на тази страница.
SELECT * FROM Owners;
Резултат:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Пример
Ако искаме да върнем списък с всички собственици, които нямат OwnerId
от 3
, можем да направим това:
SELECT *
FROM Owners
WHERE OwnerId != 3;
Резултат:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Нашата заявка използва оператора не е равно на (!=
), за да проверите дали OwnerId
колоната не е равна на 3
. Заявката връща всички собственици с изключение на собственик номер 3.
Стрингове
Когато сравнявате със стойност на низ, използвайте кавички около низа. Например, ако искаме да получим информация за всички собственици, чието собствено име не е Хоумър, бихме могли да направим следното:
SELECT *
FROM Owners
WHERE FirstName != 'Homer';
Резултат:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Множество условия
Ако имате няколко условия, можете да използвате множество оператори (независимо дали и двата едни и същи или различни).
Като това:
SELECT * FROM Owners
WHERE OwnerId != 1 AND OwnerId != 3;
Резултат:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
След като започнете да използвате повече условия, трябва да използвате скоби, за да заобиколите условията, които искате да бъдат оценени първо. Ако не направите това, може да откриете, че получавате неочаквани резултати, поради условията, които се оценяват в ред, който не сте възнамерявали.
Отхвърляне на условието
Ако използвате NOT
оператор, за да отречете условието, предоставено от оператора не е равно на, в крайна сметка ще получите резултатите от равните (=
) оператор:
SELECT *
FROM Owners
WHERE NOT FirstName != 'Homer';
Резултат:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
В този случай е по-добре просто да използвате равни (=
) оператор, като този:
SELECT *
FROM Owners
WHERE FirstName = 'Homer';
Разбира се, самото това може да бъде отречено с NOT
оператор, който след това ще ни даде същия резултат, който не е равен на (!=
) операторът ни дава:
SELECT *
FROM Owners
WHERE NOT FirstName = 'Homer';
NULL стойности
Може да сте забелязали, че нашата оригинална примерна таблица съдържа няколко NULL
стойности в Email
колона.
Колона, съдържаща NULL
означава, че няма стойност. Това е различно от 0
или false
или дори празен низ.
Не можете да използвате оператора not equal to за сравнение с NULL
. Всъщност това може да зависи от вашата СУБД и нейната конфигурация. Но засега нека да видим какво се случва, ако се опитам да сравня Email
колона до NULL
.
SELECT * FROM Owners
WHERE Email != NULL;
Резултат:
(0 rows affected)
Начинът за тестване за не-NULL
стойности е да използвате IS NOT NULL
.
Следователно ще трябва да пренапишем горното изявление, както следва.
SELECT * FROM Owners
WHERE Email IS NOT NULL;
Резултат:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Сега получаваме само онези редове, които не са NULL
в Email
колона.
Ако се интересувате, вижте SQL Server ANSI_NULLS Explained
за да видите как можете да промените начина NULL
стойностите се третират в SQL Server.