V tomto článku budeme hovořit o WHERE
klauzule a jak ji používat v MySQL. Kromě SELECT
, rozsah WHERE
klauzule obsahuje UPDATE
a DELETE
prohlášení. WHERE
klauzule je nepostradatelná pro kvalitní práci s databázemi MySQL. Proto se tento článek bude zabývat touto klauzulí a podrobně prozkoumá její charakteristické rysy.
Když se zabýváme MySQL, potřebujeme v naprosté většině případů podmíněné klauzule pro příkazy SELECT. Takové klauzule určují výběrová kritéria, takže dostáváme pouze data, která potřebujeme.
MySQL WHERE
klauzule je nejúčinnějším prostředkem k filtrování výsledků. Je flexibilní, umožňuje uživatelům specifikovat různé podmínky pro výběr dat a kombinovat několik podmínek v jednom výpisu. Aby byla vaše každodenní pracovní rutina ještě příjemnější, je vždy lepší uchýlit se k profilování MySQL a optimalizaci dotazů.
Obsah
- Syntaxe MySQL WHERE
- Použití WHERE v MySQL
- Příklad jedné podmínky dotazu WHERE
- Více podmínek WHERE
- KDE A operátor
- KDE NEBO operátor
- Použití AND s podmínkami NEBO
- operátor KDE MEZI
- operátor WHERE LIKE
- KDE NENÍ TAKOVÝ příklad
- Operátor WHERE IN
- KDE NENÍ V příkladu
- Operátor WHERE IS NULL
- příklad WHERE IS NOT NULL
- KDE NEEXISTUJE
- KDE EXISTUJE
- Použití klauzule WHERE MySQL s operátory porovnání
- Souhrn
Syntaxe MySQL WHERE
Nejprve se podívejme blíže na použití WHERE
v SELECT
prohlášení. Základní syntaxe je následující:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
SELECT … FROM
je standardní příkaz definující, na které sloupce a na kterou tabulku cílíme. WHERE
klíčové slovo identifikuje kritéria výběru dat. Může existovat jedna hodnota, rozsah mezi hodnotami, dílčí dotaz a více než jedna podmínka.
Automatizujte svou práci pomocí kritérií dotazů. Prohlédněte si je a vizuálně je upravte na samostatných kartách našeho vizuálu Dotazovací nástroj MySQL kam kreslíte svůj dotaz. Nemusíte zadávat názvy sloupců ani si pamatovat složitá pravidla. Stačí vybrat požadovaná data ze seznamů a užít si výsledky.
Použití WHERE v MySQL
MySQL funguje při provádění SELECT
následujícím způsobem příkaz obsahující WHERE
klauzule:
- Vyhodnoťte
FROM
klauzule k identifikaci cílové tabulky. - Pokračujte na
WHERE
klauzule k vyhodnocení kritérií pro výběr dat. - Zaškrtněte
SELECT
příkaz k definování sloupců, které se mají načíst.
Poznámka :SELECT
příkaz často obsahuje ORDER BY
klauzule, která řadí výsledky vzestupně nebo sestupně. Pokud ano, MySQL to nakonec vyhodnotí.
Princip práce MySQL WHERE
je podobný IF
stav v programovacích jazycích. Porovnává hodnoty, které poskytujeme, s hodnotami cílové tabulky MySQL. Když se tyto hodnoty shodují, RDBMS tyto záznamy načte uživatelům.
Když je splněna podmínka pro WHERE
klauzule je textová hodnota, vkládáme tento text do jednoduchých uvozovek. Pro číselné hodnoty však nejsou nutné žádné uvozovky.
SELECT first_name, last_name, city
FROM Readers
WHERE City = ‘Seattle’;
SELECT *
FROM Readers
WHERE CustomerID = 24;
Vylepšete své skriptovací schopnosti pomocí pokročilého formátovače MySQL, který umožňuje zkrášlit váš kód tak, aby byl přesně takový, jak se vám líbí.
Nyní se podívejme na použití WHERE
doložka. Zahrnuje řadu konkrétních případů. Nejlepší způsob, jak je prozkoumat, je odkázat na praktický MySQL WHERE
příklad pro každý scénář.
Příklad dotazu WHERE s jednou podmínkou
Nejjednodušší scénář použití této klauzule je MySQL WHERE
mít jedno jediné kritérium pro výběr dat. Předpokládejme, že nějaká společnost chce získat seznam svých zaměstnanců pracujících v oddělení péče o zákazníky jako manažeři podpory:
SELECT
last_name,
first_name,
job_title
FROM
employees
WHERE
jobtitle = 'Support';
Dotaz načte data od zaměstnanců tabulky a filtrujte záznamy podle hodnoty v job_title sloupec. Měl by vrátit seznam všech příjmení a jmen všech zaměstnanců, kteří pracují jako manažeři podpory. Výstup je níže:
last_name | křestní_jméno | job_title |
Liška | Marie | Podpora |
Černá | Jan | Podpora |
Johnson | Steve | Podpora |
Hudson | Diana | Podpora |
Williams | Katie | Podpora |
Zelená | Jake | Podpora |
Poznámka :Сode méně a dosáhněte více s MySQL syntax checker. dbForge Studio pro MySQL je IDE s bohatými funkcemi, které je navrženo pro usnadnění vývoje, údržby a správy databází MySQL a MariaDB.
Více podmínek WHERE
Výše uvedený příklad dokazuje, že MySQL WHERE
klauzule přináší data, která odpovídají podmínce. V tomto případě odfiltroval všechny zaměstnance se zadanou pracovní pozicí. K získání dat však často potřebujeme nastavit několik kritérií. Je to možné – musíme použít MySQL WHERE
s konkrétními operátory – AND
operátor a OR
operátor.
operátor KDE A
Udělejme náš předchozí příklad trochu složitější. Chceme seznam zaměstnanců pracujících v oddělení podpory, přijatých v loňském roce.
Abychom toho dosáhli, nastavíme dvě podmínky a sjednotíme je pomocí AND
logický operátor:
SELECT
last_name,
first_name,
job_title,
hire_year
FROM
employees
WHERE
jobtitle = 'Support' AND
hire_year = 2021;
Výstup:
last_name | křestní_jméno | job_title | nájemný_rok |
Liška | Marie | Podpora | 2021 |
Černá | Jan | Podpora | 2021 |
Johnson | Steve | Podpora | 2021 |
Samotné psaní kódu zabírá lví podíl na celkovém čase, který strávíte vývojem a správou databáze. Zdvojnásobte rychlost kódování pomocí vylepšeného a optimalizovaného editoru kódu serveru MySQL, který je součástí dbForge Studio for MySQL.
operátor WHERE NEBO
Pomocí OR
logický operátor je další metoda práce s několika podmínkami v MySQL WHERE
doložka. Pokud odešleme tento dotaz, vrátí data odpovídající kritériím, která jsme nastavili.
Firma chce prověřit stálé zákazníky ze dvou měst. Za tímto účelem uvedeme tato města a použijeme OR
operátor.
SELECT
lastName,
firstName,
city
FROM
customers
WHERE
city = 'Seattle' OR
city = 'Bellevue';
last_name | křestní_jméno | město |
Anderson | Marie | Seattle |
Černá | Jan | Seattle |
Thompson | Steve | Bellevue |
Smith | Diana | Bellevue |
Williams | Katie | Seattle |
Peters | Jake | Seattle |
Použití AND s podmínkami OR
MySQL umožňuje kombinovat WHERE AND OR
MySQL – oba logické operátory mohou být přítomny v jednom příkazu. V tomto případě MySQL zkontroluje tři podmínky najednou.
Knihovna chce například získat informace o svých čtenářích sídlících v Bellevue, kteří se v roce 2021 stali pravidelnými čtenáři knihovny nebo přečetli více než 20 knih.
V tomto případě MySQL WHERE
řetězec se stává složitějším. Pro přizpůsobení a uspořádání AND
&OR
podmínky, používáme závorky k určení, jak je musí MySQL vyhodnotit.
Podívejte se na příklad níže:
SELECT *
FROM readers
WHERE (city = 'Bellevue' AND reg_year = '2020')
OR (books_read > 20);
Výstup:
last_name | křestní_jméno | město | reg_year | přečtení_knih |
Anderson | Marie | Seattle | 2021 | 25 |
Jones | Chris | Bellevue | 2020 | 12 |
Thompson | Lora | Seattle | 2020 | 35 |
Farrell | Brian | Bellevue | 2021 | 48 |
Smith | Jeff | Bellevue | 2020 | 50 |
Peters | Anna | Bellevue | 2020 | 10 |
Patterson | Jan | Bellevue | 2020 | 11 |
Tento výstup ukazuje některé výsledky odpovídající podmínce města bydliště + roku registrace. Zahrnuje také výsledky odpovídající druhé podmínce, tedy přečtení více než 20 knih.
operátor WHERE BETWEEN
Operátor BETWEEN umožňuje nastavení širších limitů. Předpokládejme, že knihovna chce získat seznam svých čtenářů, kteří se připojili v letech 2019, 2020 a 2021. Místo odeslání několika dotazů nebo použití AND
operátor, můžeme nastavit rozsah pro WHERE
pomocí BETWEEN
operátor.
Abychom získali seznam čtenářů, kteří se připojili v letech 2019 až 2022, odešleme následující dotaz:
SELECT
last_Name,
first_Name,
reg_year
FROM
readers
WHERE
reg_year BETWEEN 2019 AND 2021
ORDER BY reg_year;
Výstup:
last_name | křestní_jméno | reg_year |
Anderson | Marie | 2019 |
Jones | Chris | 2019 |
Thompson | Lora | 2019 |
Farrell | Brian | 2019 |
Smith | Jeff | 2020 |
Peters | Anna | 2020 |
Patterson | Jan | 2020 |
Williams | Označit | 2021 |
Výlety | Andrew | 2021 |
Grant | Valentýna | 2021 |
operátor WHERE LIKE
Použití operátoru LIKE vám umožní použít klauzuli WHERE k výběru určitých záznamů, které obsahují konkrétní vzor. K definování tohoto vzoru používáme znak procenta (%) k nahrazení znaku nebo řetězce několika znaků libovolné délky.
Nejběžnější vzory pro MySQL SELECT WHERE LIKE
jsou následující:
WHERE
hodnota LIKE 'abc%
‘ – vyhledá a vrátí všechny hodnoty začínající „abc“
WHERE
hodnota LIKE '%abc'
– vyhledá a vrátí všechny hodnoty končící na „abc“
WHERE
hodnota LIKE '%abc%'
– vyhledá a vrátí hodnoty, které mají „abc“ kdekoli mezi začátkem a koncem
Pojďme se podívat na WHERE LIKE
příklad. Společnost chce získat seznam svých zákazníků z USA a Velké Británie. Dotaz je následující:
SELECT ContactName, Country, City
FROM Customers
WHERE Country LIKE 'U%'
ORDER BY ContactName;
Výstup je:
Název kontaktu | Země | Město |
Helen Bennett | Velká Británie | Cowes |
Simon Crowther | Velká Británie | Londýn |
Hari Kumar | Velká Británie | Londýn |
Howard Snyder | USA | Eugene |
Yoshi Latimer | USA | Elgin |
John Steel | USA | Walla Walla |
Jaime Torres | USA | San Francisco |
Fran Wilson | USA | Portland |
příklad WHERE NOT LIKE
Existuje další případ, kdy potřebujete některá data z výsledků vyloučit. Můžeme použít MySQL WHERE NOT LIKE
operátor. Vyhledá a vrátí data, která nemají specifické znaky.
Společnost chce seznam svých zákazníků ze všech zemí kromě Spojeného království a USA. Syntaxe WHERE NOT LIKE
v MySQL bude vypadat následovně:
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT LIKE 'U%'
ORDER BY Country;
Výstup:
Název kontaktu | Země | Město |
Roland Mendel | Rakousko | Graz |
Georg Pipps | Rakousko | Salcburk |
Catherine Dewey | Belgie | Bruxelles |
Pascale Cartrain | Belgie | Charleroi |
Elizabeth Lincoln | Kanada | Tsawassen |
Yoshi Tannamuri | Kanada | Vancouver |
Jean Fresnière | Kanada | Montréal |
Jytte Petersen | Dánsko | København |
Palle Ibsen | Dánsko | Århus |
Pirkko Koskitalo | Finsko | Oulu |
Matti Karttunen | Finsko | Helsinki |
Annette Roulet | Francie | Toulouse |
Marie Bertrand | Francie | Paříž |
Maria Anders | Německo | Berlín |
Hanna Mooss | Německo | Mannheim |
Operátor WHERE IN
Pomocí IN
a NOT IN
klíčová slova jsou další možností, jak filtrovat řádky a načíst pouze část dat, která odpovídá našim přísným kritériím. Primárním účelem je snížit počet OR
klauzule v jedné SELECT
prohlášení.
MySQL WHERE IN
apeluje na řádky obsahující hodnoty, které jsme zadali pro WHERE
stav. Chceme například získat seznam zákazníků, kteří sídlí v několika evropských zemích. WHERE IN
syntaxe je v MySQL následující:
SELECT ContactName, Country, City
FROM Customers
WHERE Country IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
Vezměte prosím na vědomí, že naše hodnoty, které určují podmínku vyhledávání, uzavíráme v závorkách. V případě práce s textovými hodnotami je musíme všechny dát do jednoduchých uvozovek. Pokud jsou však naše hodnoty a číselné hodnoty, uvedeme je bez jednoduchých uvozovek, např. (25, 35, 45).
Výstup výše uvedeného MySQL WHERE IN
klauzule v SELECT
prohlášení je:
Název kontaktu | Země | Město |
Catherine Dewey | Belgie | Bruxelles |
Pascale Cartrain | Belgie | Charleroi |
Frédérique Citeaux | Francie | Štrasburk |
Laurence Lebihans | Francie | Marseille |
Janine Labrune | Francie | Nantes |
Martine Rancé | Francie | Lille |
Alexander Feuer | Německo | Lipsko |
Henriette Pfalzheim | Německo | Köln |
Horst Kloss | Německo | Cunewalde |
Karin Josephs | Německo | Münster |
Rita Müller | Německo | Stuttgart |
Thomas Hardy | Velká Británie | Londýn |
Victoria Ashworth | Velká Británie | Londýn |
Elizabeth Brown | Velká Británie | Manchester |
Ann Devon | Velká Británie | Londýn |
příklad WHERE NOT IN
Opačný případ je MySQL WHERE NOT IN
doložka. Používá se k zajištění toho, že váš dotaz bude ignorovat ty řádky obsahující hodnoty zadané pro podmínku. Ve výše uvedeném příkladu jsme požadovali zákazníky ze 4 určitých evropských zemí. MySQL WHERE NOT IN
SELECT
dotaz na stejný požadavek vrátí všechny zákazníky s bydlištěm v jiných zemích kromě těch 4 definovaných dříve.
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
Výstup:
Název kontaktu | Země | Město |
Patricio Simpson | Argentina | Buenos Aires |
Sergio Gutiérrez | Argentina | Buenos Aires |
Brian Citeaux | Kanada | Montréal |
Laura Smith | Kanada | Toronto |
Jane Green | Kanada | Toronto |
Martine Rancé | Kanada | Vancouver |
Alexander Feuer | Kanada | Århus |
Paolo Accorti | Itálie | Řím |
Giovanni Rovelli | Itálie | Turín |
Anna Moroni | Itálie | Pavia |
Poznámka :Doporučujeme použít [NOT] EXISTS
přes [NOT] IN
protože EXISTS
logický operátor pracuje rychleji než IN
, při porovnávání datových sad pomocí poddotazu. Navíc NOT EXISTS
zabrání neočekávaným výsledkům, když zdrojová data obsahují NULL
hodnoty.
operátor WHERE IS NULL
Chcete-li zkontrolovat, zda je hodnota NULL
nebo ne, použijte IS NULL
operátor. Následující příkaz používá WHERE
klauzule s IS NULL
operátor pro získání řádků bez hodnoty v books_read
sloupec:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NULL;
Výstup bude vypadat takto:
last_name | křestní_jméno | reg_year | přečtení_knih |
Janett | Overacker | 2020 | NULL |
Lidia | Swenson | 2017 | NULL |
Albert | Cepeau | 2018 | NULL |
Anastasia | Johnson | 2021 | NULL |
Will | Smith | 2017 | NULL |
příklad WHERE IS NOT NULL
Na rozdíl od předchozího příkazu WHERE IS NOT NULL
, naopak zobrazuje pouze ty řádky, které obsahují nějakou hodnotu v příslušném sloupci. V následujícím příkladu vybereme pouze ty řádky, kde je books_read sloupec není prázdný:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NOT NULL;
Ve výstupu uvidíte pouze ty řádky, které obsahují hodnotu v books_read sloupec:
last_name | křestní_jméno | reg_year | přečtení_knih |
Cory | Baster | 2021 | 8 |
Maddison | Winston | 2022 | 3 |
Isabella | Garsia | 2014 | 45 |
Jeremy | Koh | 2022 | 1 |
Aaron | Peterson | 2021 | 15 |
WHERE EXISTS
The EXISTS
operator checks if the subquery returns any value at all. Typically, this operator is used to indicate that at least one row in a table satisfies a certain condition.
In the example below,
SELECT last_name, first_name
FROM customers
WHERE EXISTS
(SELECT * FROM discounts WHERE customers.id = discounts.customer_id)
WHERE NOT EXISTS
However, the NOT EXISTS
operator is there for us in case we want to make sure whether there are rows in the table that do not satisfy a certain condition. For example, let’s find all products from the Products table for which there were no orders in the Orders table:
SELECT last_name, first_name
FROM customers
WHERE NOT EXISTS
(SELECT * FROM discounts WHERE customers.id = discounts.customer_id)
There is a separate article in our blog for those willing to learn more about the difference between EXISTS and NOT EXISTS in SQL.
Using MySQL WHERE clause with comparison operators
As we know, the WHERE
condition value can be any number, text, string, or subquery. Besides specifying the condition strictly, we can set a wider meaning for it by using the comparison operators. One example of a similar function is using the BETWEEN
operator. Now, let us review other options to set the condition range.
Operator | Description | Example |
= | Equal to the value. It is applicable for almost any data type. | SELECT * FROM VisitorsWHERE City =’London’; |
<> or != | Not equal to. It excludes the rows matching the value from the results. | SELECT * FROM CustomersWHERE Country=’Germany’ AND City !=’Berlin’; |
< | Less than. Mostly applies to numbers and date/time. | SELECT * FROM CustomersWHERE CustomerID <7; |
> | Greater than. Works in the same way, for numeric values and date/time. | SELECT * FROM CustomersWHERE CustomerID> 10; |
<= | Less than or equal to. The results set includes the rows with the same values or less than the condition value. | SELECT * FROM CustomersWHERE CustomerID <=5; |
>= | Greater than or equal to. The result set includes rows having the same values exceeding the condition values. | SELECT * FROM CustomersWHERE CustomerID>=55; |
In our example, we want to retrieve the list of customers with a customer ID lower than 90 who reside in the USA. The query is the following:
SELECT CustomerID, ContactName, City, Country
FROM Customers
WHERE CustomerID < 90 AND Country ='USA';
The output is:
CustomerID | ContactName | City | Country |
65 | Paula Wilson | Albuquerque | USA |
55 | Rene Phillips | Anchorage | USA |
78 | Liu Wong | Butte | USA |
36 | Yoshi Latimer | Elgin | USA |
32 | Howard Snyder | Eugene | USA |
82 | Helvetius Nagy | Kirkland | USA |
48 | Fran Wilson | Portland | USA |
77 | Liz Nixon | Portland | USA |
45 | Jaime Torres | San Francisco | USA |
89 | Karl Jablonski | Seattle | USA |
55 | Rene Phillips | Anchorage | USA |
Summary
As you see, MySQL WHERE
is among the most helpful clauses for all MySQL users. The variety of different logical operators lets you focus on the specific portion of data only, filter it correctly, and receive the results you need. Besides, modern professional tools for MySQL databases allow you to perform all tasks faster and easier. They take the burden of manual routines off your shoulders and make the performance much more stable and reliable. To sum up, working with a WHERE
statement is not too complicated. However, it requires being familiar with the corresponding commands. The command-line tools are more oriented toward experienced tech-savvy users. On the contrary, dbForge Studio for MySQL can boast an intuitive graphical interface. The intelligent code completion feature will be of use while working with the WHERE
clause, navigating the code, obtaining quick object information, and instantly performing syntax checks. Moreover, dbForge Query Builder will be of use to easily build WHERE
clauses visually.
Useful Links
- Joins in MySQL
- MySQL update query