sql >> Databasteknik >  >> RDS >> Database

SQL inte lika med (!=) Operator för nybörjare

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.


  1. MySQL antal objekt inom i klausul

  2. Tips och knep för implementering av databasrollbaserade åtkomstkontroller för MariaDB

  3. Hur NOT LIKE fungerar i MariaDB

  4. pyodbc.connect() fungerar, men inte sqlalchemy.create_engine().connect()