MySQL Klauzule WHERE: AND, OR, IN, NOT IN Příklad dotazu
⚡ Chytré shrnutí
MySQL Klauzule WHERE filtruje řádky před dosažením výsledné sady a používá přesná kritéria pro příkazy SELECT, UPDATE a DELETE. Pochopení operátorů AND, OR, IN, NOT IN a porovnávacích operátorů umožňuje začátečníkům načíst přesně ty záznamy, které dotaz vyžaduje.

V čem je klauzule WHERE MySQL?
klauzule WHERE in MySQL je klíčové slovo používané k určení přesných kritérií dat nebo řádků, které budou ovlivněny zadaným příkazem SQL. Klauzuli WHERE lze použít s příkazy SQL jako INSERT, UPDATE, SELECT a DELETE k filtrování záznamů a provádění různých operací s daty.
Podívali jsme se na to, jak se dotazovat na data z a databáze pomocí příkazu SELECT v předchozím kurzu. Příkaz SELECT vrátil všechny výsledky z dotazované databázové tabulky.
Existují však situace, kdy chceme omezit výsledky dotazu na zadanou podmínku. V takových situacích se hodí klauzule WHERE v SQL, která funguje stejně v... Dotaz DELETE nebo UPDATE stejně jako v dotazu SELECT.
Syntaxe klauzule WHERE
Základní syntaxe klauzule WHERE je následující.
SELECT * FROM tableName WHERE condition;
ZDE
- "VYBRAT * Z názvu tabulky" je standard příkaz SELECT
- "KDE" je klíčové slovo, které omezuje sadu výsledků, a "stav" je filtr použitý na výsledky. Filtr může být rozsah, jedna hodnota nebo dílčí dotaz.
Předpokládejme, že chceme získat údaje o členovi z tabulky members, kterému je přiřazeno číslo členství 1. Níže uvedený skript toho dosáhne.
SELECT * FROM `members` WHERE `membership_number` = 1;
Spuštění tohoto skriptu v MySQL ponk na „myflixdb“ vygeneruje níže uvedený výsledek.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
Jedna podmínka málokdy stačí. Následující části kombinují WHERE s logických operátorů.
klauzule WHERE v kombinaci s – A AUTOMATIZACI LOGICKÝ OperaTor
S logickým operátorem AND se řádek vrátí pouze tehdy, jsou-li splněna VŠECHNA zadaná kritéria.
Předpokládejme, že chceme všechny filmy v kategorii 2, které byly vydány v roce 2008. Níže uvedený skript toho dosahuje.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
Spuštění výše uvedeného skriptu pro „myflixdb“ vede k následujícímu výsledku.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Funkce AND zužuje sadu výsledků. OR ji rozšiřuje.
klauzule WHERE v kombinaci s – OR LOGICKÝ OperaTor
S operátorem OR se vrátí řádek, pokud je splněno KTERÉKOLI ze zadaných kritérií.
Následující skript zařadí všechny filmy buď do kategorie 1, nebo do kategorie 2.
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
Výsledná sada je zobrazena níže.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Řetězení mnoha podmínek OR se stává obtížně čitelným. Klíčové slovo IN to řeší.
klauzule WHERE v kombinaci s – IN Klíčové slovo
Klauzule WHERE, pokud je použita s klíčovým slovem IN, ovlivňuje pouze řádky, jejichž hodnoty odpovídají zadanému seznamu. IN snižuje počet klauzulí OR, které byste jinak museli napsat.
Následující MySQL Dotaz WHERE IN vrací řádky, kde je membership_number buď 1, 2 nebo 3.
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
Výsledná sada je zobrazena níže.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
NOT IN provede opačný filtr.
klauzule WHERE v kombinaci s – NE V Klíčové slovo
S klíčovým slovem NOT IN klauzule WHERE vylučuje každý řádek, jehož hodnota odpovídá zadanému seznamu.
Následující dotaz vrací řádky, kde membership_number NENÍ 1, 2 nebo 3.
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
Výsledná sada je zobrazena níže.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
Funkce WHERE také filtruje hodnoty podle velikosti a rovnosti pomocí porovnávacích operátorů.
klauzule WHERE v kombinaci s – SROVNÁNÍ Operatorů
Porovnávací operátory menší než (<), rovno (=), větší než (>) a nerovná se (<>) lze všechny použít s klauzulí WHERE.
= Rovná
Následující skript získá všechny ženské členy z tabulky členů pomocí operátoru rovná se porovnání.
SELECT * FROM `members` WHERE `gender` = 'Female';
Výsledná sada je zobrazena níže.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> Větší než
Následující skript získá všechny platby, které jsou větší než 2,000 XNUMX z tabulky plateb.
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
Výsledná sada je zobrazena níže.
| payment_id | membership_number | payment_date | description | amount_paid | external_reference_number |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Movie rental payment | 2500 | 11 |
| 3 | 3 | 30-07-2012 | Movie rental payment | 6000 | NULL |
<> Nerovná se
Následující scénář obsahuje všechny filmy, jejichž id kategorie není 1.
SELECT * FROM `movies` WHERE `category_id` <> 1;
Výsledná sada je zobrazena níže.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 5 | Daddy's Little Girls | NULL | 2007 | 8 |
| 6 | Angels and Demons | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | John Schultz | 2005 | 8 |
Stručný přehled: Klauzule WHERE Operatorů
Operátory, které jsou nejčastěji spárovány s operátorem WHERE, jsou shrnuty níže. Úplné definice naleznete v MySQL reference operátora.
| OperaTor | Význam | Příklad podmínky |
|---|---|---|
| = | Rovná | `gender` = 'Žena' |
| <> | Nerovná se | `category_id` <> 1 |
| > / | Větší než / menší než | `zaplacená_částka` > 2000 |
| A / NEBO | Všechna kritéria / libovolná kritéria | `category_id` = 2 A `year_released` = 2008 |
| VNITŘ / NEVNITŘ | Odpovídá / vylučuje seznam | `číslo_členství` IN (1,2,3) |
| JE NULL / NENÍ NULL | Testy na chybějící hodnoty | `postal_adresa` JE NULL |
⚠️ Poznámka: Hodnota NULL se nikdy neshoduje s = nebo <>. Pokud sloupec neobsahuje žádnou hodnotu, použijte IS NULL nebo IS NOT NULL.
Hlavolam: Najděte filmy vrácené pozdě
Předpokládejme, že chceme vrácení vypůjčených filmů do data uzávěrky 25. 06. 2012. Toho dosáhneme kombinací operátoru WHERE s operátorem „menší než“ a operátorem AND.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
Spuštění výše uvedeného skriptu v MySQL workbench dává následující výsledky.
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |

