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

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

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.


  1. Jak funguje funkce JulianDay() v SQLite

  2. Příkaz SQL WHERE

  3. Výkonnostní překvapení a předpoklady:Libovolné TOP 1

  4. PG::Chyba:SELECT DISTINCT, ORDER BY se musí objevit ve výběrovém seznamu