sql >> Databáze >  >> RDS >> Database

Operátor SQL se nerovná (!=) pro začátečníky

V SQL se operátor nerovná (!= ) porovnává nerovnost dvou výrazů. To znamená, že testuje, zda jeden výraz není rovno jinému výrazu.

Pokud je jeden nebo oba operandy NULL , NULL je vráceno.

SQL má také jiný operátor, který se nerovná operátoru (<> ), který dělá to samé. Který z nich použijete, může záviset na vaší DBMS, kterou z nich používáte nejpohodlněji, a možná také na tom, zda vaše organizace má nějaké konvence kódování, které určují, která z nich by se měla používat.

Tabulka zdrojů

Představte si, že naše databáze obsahuje následující tabulku. Toto je tabulka, kterou použijeme pro příklady na této stránce.

SELECT * FROM Owners;

Výsledek:

+-----------+-------------+------------+----------------+-------------------+
| 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]  |
+-----------+-------------+------------+----------------+-------------------+

Příklad

Pokud bychom chtěli vrátit seznam všech vlastníků, kteří nemají OwnerId z 3 , mohli bychom udělat toto:

SELECT *
FROM Owners
WHERE OwnerId != 3;

Výsledek:

+-----------+-------------+------------+----------------+-------------------+
| 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]  |
+-----------+-------------+------------+----------------+-------------------+

Náš dotaz používá operátor nerovná se (!= ), abyste otestovali, zda OwnerId sloupec není roven 3 . Dotaz vrátí všechny vlastníky kromě vlastníka číslo 3.

Řetězce

Při porovnávání s hodnotou řetězce použijte kolem řetězce uvozovky. Pokud bychom například chtěli získat informace o všech majitelích, jejichž křestní jméno není Homer, mohli bychom udělat následující:

SELECT *
FROM Owners
WHERE FirstName != 'Homer';

Výsledek:

+-----------+-------------+------------+----------------+-------------------+
| 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]  |
+-----------+-------------+------------+----------------+-------------------+

Více podmínek

Pokud máte více podmínek, můžete použít více operátorů (ať už oba stejné operátory nebo různé).

Takhle:

SELECT * FROM Owners 
WHERE OwnerId != 1 AND OwnerId != 3;

Výsledek:

+-----------+-------------+------------+----------------+-------------------+
| 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]  |
+-----------+-------------+------------+----------------+-------------------+

Jakmile začnete používat více podmínek, měli byste pomocí závorek obklopit podmínky, které chcete vyhodnotit jako první. Pokud to neuděláte, můžete zjistit, že dostanete neočekávané výsledky, protože podmínky jsou vyhodnocovány v pořadí, které jste nezamýšleli.

Negování podmínky

Pokud použijete NOT Chcete-li negovat podmínku poskytnutou operátorem nerovná se, nakonec získáte výsledky rovné (= ) operátor:

SELECT *
FROM Owners
WHERE NOT FirstName != 'Homer';

Výsledek:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
+-----------+-------------+------------+----------------+-------------------+

V tomto případě je lepší použít rovná se (= ), například takto:

SELECT *
FROM Owners
WHERE FirstName = 'Homer';

To samo o sobě lze samozřejmě negovat pomocí NOT operátor, který by nám pak dal stejný výsledek, který se nerovná (!= ) nám operátor dává:

SELECT *
FROM Owners
WHERE NOT FirstName = 'Homer';

Hodnoty NULL

Možná jste si všimli, že naše původní vzorová tabulka obsahuje několik NULL hodnoty v Email sloupec.

Sloupec obsahující NULL znamená, že nemá žádnou hodnotu. To se liší od 0 nebo false nebo dokonce prázdný řetězec.

K porovnání s NULL nelze použít operátor nerovná se . Ve skutečnosti to může záviset na vašem DBMS a jeho konfiguraci. Ale teď se podívejme, co se stane, když se pokusím porovnat Email sloupec na NULL .

SELECT * FROM Owners 
WHERE Email != NULL;

Výsledek:

(0 rows affected)

Způsob testování, zda není NULL hodnoty je použít IS NOT NULL .

Proto bychom museli výše uvedené prohlášení přepsat následovně.

SELECT * FROM Owners 
WHERE Email IS NOT NULL;

Výsledek:

+-----------+-------------+------------+----------------+-------------------+
| 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]  |
+-----------+-------------+------------+----------------+-------------------+

Nyní získáme pouze ty řádky, které nejsou NULL v Email sloupec.

Pokud máte zájem, přečtěte si SQL Server ANSI_NULLS Explained abyste viděli, jak můžete změnit způsob NULL hodnoty jsou zpracovávány v SQL Server.


  1. Export dat do souboru JSON v Oracle 11g pomocí PL/SQL

  2. PostgreSQL:export výsledných dat z SQL dotazu do Excelu/CSV

  3. Příklady převodu ‚date‘ na ‚datetimeoffset‘ v SQL Server (T-SQL)

  4. Osvědčené postupy při škálování databází:Část druhá