Operátor se rovná (=
) je pravděpodobně nejběžněji používaný operátor v SQL. Porovnává rovnost dvou výrazů. I když jste teprve začali svou cestu SQL, pravděpodobně tento operátor znáte.
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 s určitým majitelem, mohli bychom udělat toto:
SELECT *
FROM Pets
WHERE OwnerId = 3;
Výsledek:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Náš dotaz používá operátor rovná se (=
) k porovnání rovnosti hodnoty OwnerId
sloupec a 3
.
V tomto případě má majitel číslo 3 3 domácí mazlíčky.
Ř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 mazlíčcích jménem Fluffy, mohli bychom udělat následující:
SELECT *
FROM Pets
WHERE PetName = 'Fluffy';
Výsledek:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
Náš dotaz používá operátor rovná se (=
) k porovnání rovnosti hodnoty PetName
sloupec a řetězec Fluffy
.
V našem případě vidíme, že hotel pro domácí mazlíčky má v současnosti dva mazlíčky jménem Fluffy.
Více podmínek
Pokud máte více podmínek, můžete použít více operátorů se rovná.
Takhle:
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Tweet';
Výsledek:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
Vidíme, že to vrátilo řádky s PetName
sloupec byl buď Fluffy
nebo Tweet
.
Negace podmínky
Můžete použít NOT
operátor negovat podmínku poskytnutou operátorem rovná se. Zde je příklad:
SELECT *
FROM Pets
WHERE NOT 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 | +---------+-------------+-----------+-----------+------------+
Alternativním způsobem, jak toho dosáhnout, je použít operátor nerovná se, což je buď <>
nebo !=
(nebo obojí) v závislosti na vašem DBMS.
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 rovná 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í NULL
je použít IS
.
Proto bychom museli výše uvedené prohlášení přepsat následovně.
SELECT * FROM Pets
WHERE DOB IS NULL;
Výsledek:
+---------+-------------+-----------+-----------+-------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+-------| | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+-------+
NULL
Hodnoty mohou být pro začátečníky ošemetná věc, aby se zorientovali. Ve skutečnosti mohou být pro zkušené vývojáře ošemetná věc, aby se z toho dostali! V SQL NULL
má trochu jiný význam než NULL
ve většině ostatních programovacích jazyků.
Ale důležité je zapamatovat si, že v SQL NULL
znamená nedostatek hodnoty. Neexistuje žádná hodnota. Proto nemůžeme říci, že se rovná nebo nerovná něčemu jinému, protože nemá cenu začínat.
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.