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 | example@sqldat.com | | 2 | Bart | Pitt | (231) 465-3497 | example@sqldat.com | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
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 | example@sqldat.com | | 2 | Bart | Pitt | (231) 465-3497 | example@sqldat.com | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
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 | example@sqldat.com | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
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 | example@sqldat.com | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
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 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
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 | example@sqldat.com | | 2 | Bart | Pitt | (231) 465-3497 | example@sqldat.com | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
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.