Příkaz SQL WHERE Úvod
- Klauzule WHERE se používá k zahrnutí podmínky při načítání dat z tabulek.
- Když musíte zadat podmínku, která musí být dodržena při stahování dat z tabulek, v tom případě je použita klauzule.
- Kde se klauzule používá k filtrování záznamů, které načtete z příkazu select, abyste získali menší podmnožinu dat.
- Kde se klauzule také používá k provádění operací spojení
- Kde klauzule vrací pouze ty záznamy z tabulky, které splňují podmínku uvedenou v ní.
- Tato klauzule se nepoužívá pouze s dotazem SELECT, ale lze ji použít také s dotazy UPDATE a DELETE.
- Použití klauzule where s dotazem SELECT
- Klauzule Where s dotazem SELECT k načtení všech sloupců z tabulky.
- Chcete-li načíst všechny záznamy z tabulky, hvězdička je použit symbol (*).
Syntaxe:
SELECT *FROM TABLE_NAME WHERE condition;
Příklad:
Nejprve vytvoříme databázi s názvem „bookdb“. Poté v této databázi vytvoříme tabulku „knihu“ a do tabulky vložíme záznamy. Pro následující příklady budeme uvažovat stejnou databázi a také stejnou tabulku.
Nyní použijeme klauzuli where s dotazem SELECT k načtení všech sloupců z tabulky, kde je cena knihy rovna 200.
mysql> CREATE DATABASE bookdb; Query OK, 1 row affected (0.07 sec) mysql> USE bookdb; Database changed mysql> CREATE TABLE book(Book_ID INT NOT NULL AUTO_INCREMENT, Book_Name VARCHAR(100) NOT NULL, Book_Author VARCHAR(40) NOT NULL, Book_Price INT NOT NULL, PRIMARY KEY(Book_ID)); Query OK, 0 rows affected (0.24 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("Learn MySQL","Abdul S", 180); Query OK, 1 row affected (0.07 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("MySQL Explained","Andrew Comeau", 150); Query OK, 1 row affected (0.04 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("MySQL Cookbook","Paul DuBois", 250); Query OK, 1 row affected (0.08 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("murach's MySQL","Joel Murach", 200); Query OK, 1 row affected (0.07 sec) mysql> INSERT INTO book(Book_Name,Book_Author,Book_Price) VALUES ("Head First SQL","Lynn Beighley", 300); Query OK, 1 row affected (0.07 sec) mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT *FROM book WHERE Book_Price=200; +---------+----------------+-------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+----------------+-------------+------------+ | 4 | murach's MySQL | Joel Murach | 200 | +---------+----------------+-------------+------------+ 1 row in set (0.00 sec)
Existuje pouze jeden záznam s Book_ID =4, jehož cena je rovna 200. Jsou tedy zobrazeny všechny sloupce tohoto konkrétního záznamu.
- Klauzule Where s dotazem SELECT k načtení jednoho nebo více konkrétních sloupců z tabulky.
- Chcete-li načíst konkrétní sloupce z tabulky, názvy všech sloupců, které mají být načteny, by měly být uvedeny v samotném dotazu.
- Konkrétní názvy sloupců, které mají být načteny, budou odděleny čárkou.
Syntaxe:
SELECT COLUMN_NAME1,….,COLUMN_NAMEn FROM TABLE_NAME WHERE condition;
Příklad:
Použijeme klauzuli where s dotazem SELECT k načtení konkrétních sloupců (ID_knihy, Cena_knihy) z knihy tabulka, kde cena knihy je rovna 200.
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT Book_ID,Book_Price FROM book where Book_Price=200; +---------+------------+ | Book_ID | Book_Price | +---------+------------+ | 4 | 200 | +---------+------------+ 1 row in set (0.00 sec)
Existuje pouze jeden záznam s Book_ID =4, jehož cena je rovna 200. Proto se zobrazí Book_ID a Book_Price tohoto konkrétního záznamu.
- Použití klauzule where s dotazem UPDATE
Syntaxe:
UPDATE TABLE_NAME SET column_name = newvalue WHERE column_name1 = value1;
Příklad:
Použijeme klauzuli where s dotazem UPDATE na tabulku knihy k aktualizaci Book_Name a Book_Author konkrétního záznamu zadáním Book_ID jako podmínky v klauzuli where.
mysql> SELECT *FROM book; +---------+-----------------+---------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------+---------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | MySQL Cookbook | Paul DuBois | 250 | | 4 | murach's MySQL | Joel Murach | 200 | | 5 | Head First SQL | Lynn Beighley | 300 | +---------+-----------------+---------------+------------+ 5 rows in set (0.00 sec) mysql> UPDATE book SET Book_name="Database Management Systems", Book_Author="Raghu Ramakrishnan" WHERE Book_ID=3; Query OK, 1 row affected (0.19 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | | 5 | Head First SQL | Lynn Beighley | 300 | +---------+-----------------------------+--------------------+------------+ 5 rows in set (0.00 sec)
Existuje pouze jeden záznam s Book_ID =3, u tohoto záznamu jsme změnili Book_name a Book_Author. Zobrazí se tedy aktualizovaná tabulka.
- Použití klauzule where s dotazem DELETE
Syntaxe:
DELETE FROM TABLE_NAME WHERE column_name1 = value1;
Příklad:
Klauzuli where s dotazem DELETE na tabulku knihy použijeme na
odstranit knihu s konkrétním Book_ID zadáním Book_ID jako podmínky v klauzuli where.
mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | | 5 | Head First SQL | Lynn Beighley | 300 | +---------+-----------------------------+--------------------+------------+ 5 rows in set (0.00 sec) mysql> DELETE FROM book WHERE Book_ID=5; Query OK, 1 row affected (0.23 sec) mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec)
Existuje pouze jeden záznam s Book_ID =5, celý tento záznam jsme smazali z tabulky knihy. Zobrazí se tedy aktualizovaná tabulka.
Operátoři s příkazem WHERE
Můžete použít operátory s klauzulí where. Tyto operátory lze použít spolu s klauzulí where v dotazech SELECT, UPDATE a DELETE.
- Rovno (=)
Je-li s klauzulí where použit operátor rovna (=), načte tyto záznamy z tabulky vždy, když se hodnota názvu sloupce v tabulce rovná hodnotě názvu sloupce uvedenému v dotazu.
Příklad:
Použijeme klauzuli where s dotazem SELECT k načtení těch záznamů z tabulky, kde je cena knihy rovna 200.
mysql> SELECT *FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT *FROM book WHERE Book_Price=200; +---------+----------------+-------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+----------------+-------------+------------+ | 4 | murach's MySQL | Joel Murach | 200 | +---------+----------------+-------------+------------+ 1 row in set (0.00 sec)
Existuje pouze jeden záznam s Book_ID =4, jehož cena je rovna 200. Jsou tedy zobrazeny všechny sloupce tohoto konkrétního záznamu.
- Větší než (>)
Pokud je s klauzulí Where použit operátor větší než (>), načte tyto záznamy z tabulky, kdykoli je hodnota názvu sloupce v tabulce větší než hodnota názvu sloupce zadaného v dotazu.
Příklad:
Použijeme klauzuli where s dotazem SELECT k načtení těch záznamů z tabulky, kde je cena knihy vyšší než 150.
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price > 150; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 3 rows in set (0.00 sec)
Existují tři záznamy s Book_ID =1, 3 a 4, jejichž ceny jsou vyšší než 150. Jsou tedy zobrazeny všechny sloupce těchto záznamů.
- Méně než (<)
Když je s klauzulí where použit operátor menší než (<), načte tyto záznamy z tabulky, kdykoli je hodnota názvu sloupce v tabulce menší než hodnota názvu sloupce zadaného v dotazu.
Příklad:
Použijeme klauzuli where s dotazem SELECT k načtení těch záznamů z tabulky, kde je cena knihy nižší než 200.
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price < 200; +---------+-----------------+---------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------+---------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | +---------+-----------------+---------------+------------+ 2 rows in set (0.00 sec)
Existují dva záznamy s Book_ID =1 a 2, jejichž ceny jsou nižší než 200. Jsou tedy zobrazeny všechny sloupce těchto záznamů.
- Větší nebo rovno (>=)
Pokud je s klauzulí where použit operátor větší nebo rovno (>=), načte tyto záznamy z tabulky, kdykoli je hodnota názvu sloupce v tabulce větší nebo rovna hodnotě názvu sloupce uvedeného v dotaz.
Příklad:
Použijeme klauzuli where s dotazem SELECT k načtení těch záznamů z tabulky, kde je cena knihy větší nebo rovna 150.
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price >= 150; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec)
Vidíme, že existují čtyři záznamy s Book_ID =1, 2, 3 a 4, jejichž ceny jsou větší nebo rovné 150. Jsou tedy zobrazeny všechny sloupce těchto záznamů.
- Menší nebo rovno (<=)
Když je s klauzulí where použit operátor menší nebo roven (<=), načte tyto záznamy z tabulky vždy, když je hodnota názvu sloupce v tabulce menší nebo rovna hodnotě názvu sloupce uvedeného v dotazu.
Příklad:
Použijeme klauzuli where s dotazem SELECT k načtení těch záznamů z tabulky, kde je cena knihy menší nebo rovna 200.
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price <= 200; +---------+-----------------+---------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------+---------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------+---------------+------------+ 3 rows in set (0.00 sec)
Existují tři záznamy s Book_ID =1, 2 a 4, jejichž ceny jsou menší nebo rovné 200. Jsou tedy zobrazeny všechny sloupce těchto záznamů.
- Nerovná se (<>)
Když se s klauzulí where použije operátor not equal(<>), načte tyto záznamy z tabulky, kdykoli se hodnota názvu sloupce zadaná v dotazu neshoduje s hodnotou názvu sloupce v tabulce.
Příklad:
Použijeme klauzuli where s dotazem SELECT k načtení těch záznamů z tabulky, kde cena knihy není rovna 250.
mysql> SELECT * FROM book; +---------+-----------------------------+--------------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------------------+--------------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 3 | Database Management Systems | Raghu Ramakrishnan | 250 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------------------+--------------------+------------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM book WHERE Book_Price <> 250; +---------+-----------------+---------------+------------+ | Book_ID | Book_Name | Book_Author | Book_Price | +---------+-----------------+---------------+------------+ | 1 | Learn MySQL | Abdul S | 180 | | 2 | MySQL Explained | Andrew Comeau | 150 | | 4 | murach's MySQL | Joel Murach | 200 | +---------+-----------------+---------------+------------+ 3 rows in set (0.00 sec)
Existují tři záznamy s Book_ID =1, 2 a 4, jejichž ceny se nerovnají 250. Jsou tedy zobrazeny všechny sloupce těchto záznamů.