W SQL operator nierówny (!=
) porównuje nierówność dwóch wyrażeń. Oznacza to, że sprawdza, czy jedno wyrażenie nie równa się innemu wyrażeniu.
Jeśli jeden lub oba operandy są NULL
, NULL
jest zwracany.
SQL ma również inny operator nierówny (<>
), który robi to samo. To, którego używasz, może zależeć od Twojego DBMS, z którego korzystasz najwygodniej, a być może także od tego, czy Twoja organizacja ma jakieś konwencje kodowania, które dyktują, który z nich powinien być używany.
Tabela źródłowa
Wyobraź sobie, że nasza baza danych zawiera poniższą tabelę. To jest tabela, której użyjemy dla przykładów na tej stronie.
SELECT * FROM Owners;
Wynik:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
Przykład
Gdybyśmy chcieli zwrócić listę wszystkich właścicieli, którzy nie mają OwnerId
z 3
, możemy to zrobić:
SELECT *
FROM Owners
WHERE OwnerId != 3;
Wynik:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
Nasze zapytanie używa operatora nierównego (!=
), aby sprawdzić, czy OwnerId
kolumna nie jest równa 3
. Zapytanie zwraca wszystkich właścicieli z wyjątkiem właściciela nr 3.
Struny
Porównując z wartością ciągu, użyj cudzysłowów wokół ciągu. Na przykład, jeśli chcielibyśmy uzyskać informacje o wszystkich właścicielach, których imię nie jest Homer, moglibyśmy wykonać następujące czynności:
SELECT *
FROM Owners
WHERE FirstName != 'Homer';
Wynik:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
Wiele warunków
Jeśli masz wiele warunków, możesz użyć wielu operatorów (zarówno tych samych, jak i różnych).
Tak:
SELECT * FROM Owners
WHERE OwnerId != 1 AND OwnerId != 3;
Wynik:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
Gdy zaczniesz używać większej liczby warunków, powinieneś użyć nawiasów, aby otoczyć warunki, które chcesz najpierw ocenić. Jeśli tego nie zrobisz, może się okazać, że uzyskasz nieoczekiwane wyniki ze względu na warunki oceniane w kolejności, której nie zamierzałeś.
Negowanie warunku
Jeśli używasz NOT
operatora, aby zanegować warunek dostarczony przez operator nierówny, otrzymasz wyniki równości (=
) operator:
SELECT *
FROM Owners
WHERE NOT FirstName != 'Homer';
Wynik:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
W takim przypadku lepiej jest po prostu użyć równania (=
) operator, na przykład:
SELECT *
FROM Owners
WHERE FirstName = 'Homer';
Oczywiście samo to można zanegować za pomocą NOT
operator, który dałby nam ten sam wynik, co nierówne (!=
) operator daje nam:
SELECT *
FROM Owners
WHERE NOT FirstName = 'Homer';
Wartości NULL
Być może zauważyłeś, że nasza oryginalna przykładowa tabela zawiera kilka NULL
wartości w Email
kolumna.
Kolumna zawierająca NULL
oznacza, że nie ma wartości. Różni się to od 0
lub false
, a nawet pusty ciąg.
Nie możesz użyć operatora nierównego do porównania z NULL
. W rzeczywistości może to zależeć od twojego DBMS i jego konfiguracji. Ale na razie spójrzmy, co się stanie, jeśli spróbuję porównać Email
kolumna na NULL
.
SELECT * FROM Owners
WHERE Email != NULL;
Wynik:
(0 rows affected)
Sposób na testowanie pod kątem NULL
wartości to użycie IS NOT NULL
.
Dlatego musielibyśmy przepisać powyższe stwierdzenie w następujący sposób.
SELECT * FROM Owners
WHERE Email IS NOT NULL;
Wynik:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
Teraz otrzymujemy tylko te wiersze, które nie są NULL
w Email
kolumna.
Jeśli jesteś zainteresowany, zobacz SQL Server ANSI_NULLS Explained
aby zobaczyć, jak możesz zmienić sposób, w jaki NULL
wartości są traktowane w SQL Server.