I SQL är operatorn inte lika med (!=
) jämför icke-likheten mellan två uttryck. Det vill säga, det testar om ett uttryck inte är lika med ett annat uttryck.
Om endera eller båda operanderna är NULL
, NULL
returneras.
SQL har också en annan operator som inte är lika med (<> ), som gör samma sak. Vilken du använder kan bero på ditt DBMS, vilket du är mest bekväm med att använda, och kanske också om din organisation har några kodningskonventioner som dikterar vilken som ska användas.
Källtabell
Föreställ dig att vår databas innehåller följande tabell. Det här är tabellen vi kommer att använda för exemplen på den här sidan.
SELECT * FROM Owners;
Resultat:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
Exempel
Om vi ville returnera en lista över alla ägare som inte har ett OwnerId
av 3
, vi skulle kunna göra så här:
SELECT *
FROM Owners
WHERE OwnerId != 3;
Resultat:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
Vår fråga använder operatorn inte lika med (!=
) för att testa om OwnerId
kolumnen är inte lika med 3
. Frågan returnerar alla ägare utom ägare nummer 3.
Strängar
När du jämför med ett strängvärde, använd citattecken runt strängen. Om vi till exempel vill få information om alla ägare vars förnamn inte är Homer, kan vi göra följande:
SELECT *
FROM Owners
WHERE FirstName != 'Homer';
Resultat:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
Flera villkor
Om du har flera villkor kan du använda flera operatorer (både samma operatorer eller olika).
Så här:
SELECT * FROM Owners
WHERE OwnerId != 1 AND OwnerId != 3;
Resultat:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
När du börjar använda fler villkor bör du använda parenteser för att omge villkoren som du vill ska utvärderas först. Om du inte gör detta kan du upptäcka att du får oväntade resultat, på grund av att förhållandena utvärderas i en ordning som du inte hade för avsikt.
Negerande av villkoret
Om du använder NOT
Om du vill upphäva villkoret som tillhandahålls av operatorn inte lika med, kommer du att få resultaten av lika (=
) operatör:
SELECT *
FROM Owners
WHERE NOT FirstName != 'Homer';
Resultat:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
I det här fallet är det bättre att du bara använder lika (=
)-operator, så här:
SELECT *
FROM Owners
WHERE FirstName = 'Homer';
Naturligtvis kan detta i sig förnekas med NOT
operatorn, som då skulle ge oss samma resultat som den inte är lika med (!=
) ger oss:
SELECT *
FROM Owners
WHERE NOT FirstName = 'Homer';
NULL-värden
Du kanske har märkt att vår ursprungliga exempeltabell innehåller ett par NULL
värden i E-post
kolumn.
En kolumn som innehåller NULL
betyder att det inte har något värde. Detta skiljer sig från 0
eller false
, eller till och med en tom sträng.
Du kan inte använda operatorn inte lika med för att jämföra med NULL
. Egentligen kan detta bero på ditt DBMS och dess konfiguration. Men för nu, låt oss titta på vad som händer om jag försöker jämföra E-post
kolumnen till NULL
.
SELECT * FROM Owners
WHERE Email != NULL;
Resultat:
(0 rows affected)
Sättet att testa för icke-NULL
värden är att använda IS NOT NULL
.
Därför skulle vi behöva skriva om ovanstående uttalande enligt följande.
SELECT * FROM Owners
WHERE Email IS NOT NULL;
Resultat:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
Nu får vi bara de rader som inte är NULL
i E-post
kolumn.
Om du är intresserad, se SQL Server ANSI_NULLS Explained
för att se hur du kan ändra sättet NULL
värden behandlas i SQL Server.