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

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

V SQL se operátor nerovná operátoru (<> ) 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 Pets;

Výsledek:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+
(8 rows affected)

Příklad

Pokud bychom chtěli získat všechna domácí zvířata, která ne mít určitého vlastníka, mohli bychom udělat toto:

SELECT *
FROM Pets
WHERE OwnerId <> 3;

Výsledek:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Náš dotaz používá operátor nerovná se (<> ), abyste otestovali, zda OwnerId sloupec není roven 3 . Dotaz vrátí všechna domácí zvířata, která nemají vlastníka číslo 3 jako vlastníka.

Ř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 domácích mazlíčcích, kteří se nejmenují Fluffy, mohli bychom udělat následující:

SELECT *
FROM Pets
WHERE PetName <> 'Fluffy';

Výsledek:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

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 Pets 
WHERE OwnerId <> 1 AND OwnerId <> 3;

Výsledek:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Negace podmínky

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

SELECT *
FROM Pets
WHERE NOT PetName <> 'Fluffy';

Výsledek:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
+---------+-------------+-----------+-----------+------------+

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

SELECT *
FROM Pets
WHERE PetName = 'Fluffy';

To samo o sobě lze samozřejmě negovat pomocí NOT operátor, který by nám pak dal stejný výsledek, jako je rovno (<> ) nám operátor dává:

SELECT *
FROM Pets
WHERE NOT PetName = 'Fluffy';

Hodnoty NULL

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

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 sloupec DOB s NULL .

SELECT * FROM Pets 
WHERE DOB <> 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 Pets 
WHERE DOB IS NOT NULL;

Výsledek:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
+---------+-------------+-----------+-----------+------------+

Nyní získáme pouze ty řádky, které nejsou NULL v DOB 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. Jak formátovat měsíc v římských číslicích v Oracle

  2. Najít přidružení mezi databázovými poštovními účty a principy databáze v SQL Server (T-SQL)

  3. Jak zkontrolovat, zda sloupec existuje, než jej přidáte do existující tabulky v PL/SQL?

  4. Spojení tabulky na základě hodnot oddělených čárkou