I SQL er operatoren ikke lig med (!=
) sammenligner uligheden mellem to udtryk. Det vil sige, det tester, om et udtryk ikke er lig med et andet udtryk.
Hvis den ene eller begge operander er NULL
, NULL
er returneret.
SQL har også en anden ikke lig med operator (<> ), som gør det samme. Hvilken du bruger kan afhænge af dit DBMS, hvilken du er mest komfortabel med at bruge, og måske også om din organisation har nogle kodningskonventioner, der dikterer, hvilken der skal bruges.
Kildetabel
Forestil dig, at vores database indeholder følgende tabel. Dette er den tabel, vi vil bruge til eksemplerne på denne side.
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] | +-----------+-------------+------------+----------------+-------------------+
Eksempel
Hvis vi ønskede at returnere en liste over alle ejere, der ikke har et OwnerId
af 3
, kunne vi gøre dette:
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] | +-----------+-------------+------------+----------------+-------------------+
Vores forespørgsel bruger operatoren ikke lig med (!=
) for at teste, om OwnerId
kolonne er ikke lig med 3
. Forespørgslen returnerer alle ejere undtagen ejer nummer 3.
Strings
Når du sammenligner med en strengværdi, skal du bruge anførselstegn omkring strengen. For eksempel, hvis vi ønskede at få information om alle ejere, hvis fornavn ikke er Homer, kunne vi gøre følgende:
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] | +-----------+-------------+------------+----------------+-------------------+
Flere betingelser
Hvis du har flere betingelser, kan du bruge flere operatorer (både de samme operatorer eller forskellige).
Sådan:
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 begynder at bruge flere betingelser, skal du bruge parenteser til at omgive de betingelser, som du ønsker at blive evalueret først. Hvis du ikke gør dette, kan du opleve, at du får uventede resultater på grund af betingelserne, der evalueres i en rækkefølge, som du ikke havde til hensigt.
Negation af betingelsen
Hvis du bruger NOT
operatør for at ophæve betingelsen givet af ikke lig med operatoren, vil du ende med at få resultaterne af lig (=
) operatør:
SELECT *
FROM Owners
WHERE NOT FirstName != 'Homer';
Resultat:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
I dette tilfælde er du bedre stillet ved bare at bruge lig (=
) operatør, som denne:
SELECT *
FROM Owners
WHERE FirstName = 'Homer';
Selvfølgelig kan dette i sig selv blive negeret med NOT
operator, hvilket så ville give os det samme resultat, som ikke er lig med (!=
) giver os:
SELECT *
FROM Owners
WHERE NOT FirstName = 'Homer';
NULL-værdier
Du har måske bemærket, at vores originale eksempeltabel indeholder et par NULL
værdier i E-mail
kolonne.
En kolonne, der indeholder NULL
betyder, at det ikke har nogen værdi. Dette er anderledes end 0
eller falsk
, eller endda en tom streng.
Du kan ikke bruge operatoren ikke lig med til at sammenligne med NULL
. Faktisk kan dette afhænge af dit DBMS og dets konfiguration. Men for nu, lad os se på, hvad der sker, hvis jeg prøver at sammenligne E-mail
kolonne til NULL
.
SELECT * FROM Owners
WHERE Email != NULL;
Resultat:
(0 rows affected)
Måden at teste for ikke-NULL
værdier er at bruge IS NOT NULL
.
Derfor er vi nødt til at omskrive ovenstående erklæring som følger.
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 kun de rækker, der ikke er NULL
i E-mail
kolonne.
Hvis du er interesseret, se SQL Server ANSI_NULLS Forklaret
for at se, hvordan du kan ændre måden NULL
på værdier behandles i SQL Server.