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.

  • 🔍 Hlavní účel: Klauzule WHERE omezuje, kterých řádků se příkaz dotkne, takže příkazy SELECT, UPDATE a DELETE ovlivňují pouze odpovídající řádky.
  • 🔗 A AUTOMATIZACI Operator: Řádky se vracejí pouze tehdy, když se každá podmínka vyhodnotí jako pravdivá, čímž se zúží sada výsledků.
  • 🔀 OR Operator: Řádky se vracejí, když se libovolná podmínka vyhodnotí jako pravdivá, čímž se rozšiřuje sada výsledků.
  • ???? VNITŘ a NE VNITŘ: Klíčové slovo IN vyhledává seznam hodnot v jednom výrazu, zatímco NOT IN tentýž seznam vylučuje.
  • 🇧🇷 Porovnání Operators: Možnosti Rovné (=), Větší než (>), Menší než (<) a Nerovné (<>) filtrují číselné, textové a datové sloupce.
  • ⚠️ Zpracování NULL: Hodnota NULL se nikdy neshoduje s = nebo <>, takže pro testování chybějících hodnot jsou vyžadovány hodnoty IS NULL a IS NOT NULL.

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.

klauzule WHERE MySQL

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 email
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 email
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 email
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 email
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

Nejčastější dotazy

WHERE filtruje jednotlivé řádky před seskupenímping, takže nemůže odkazovat na agregační funkce. Funkce HAVING filtruje skupiny po spuštění funkce GROUP BY, takže je vhodná pro podmínky jako COUNT(*) > 5.

Použijte IS NULL nebo IS NOT NULL. OperaFunkce jako = a <> vrací neznámou hodnotu pro NULL, takže `postal_address` = NULL neodpovídá ničemu, zatímco `postal_address` IS NULL funguje.

Ano, když je filtrovaný sloupec indexován, MySQL čte pouze odpovídající řádky místo prohledávání tabulky.ping Sloupec ve funkci, například YEAR(`date_of_birth`) = 1980, brání použití indexu.

Ano. Asistenti s umělou inteligencí převádějí obyčejnou angličtinu do SQL a MySQL Workbench lze spustit výsledek. RevPorovnejte každou podmínku s vaším schématem, protože model si může vymyslet názvy sloupců.

Nejprve to otestujte pomocí SELECT. Nesprávná klauzule WHERE v Dotaz DELETE nebo UPDATE může změnit každý řádek. Zobrazte si náhled odpovídajících řádků a poté znovu použijte stejnou podmínku pro zápis.

Shrňte tento příspěvek takto: