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

Příkaz SQL WHERE

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.
  1. 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.

  1. 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ů.


  1. Jak se mohu vyhnout příliš dlouhým chybám s nezpracovanými proměnnými délkami v SQL Developer?

  2. Kde je můj neplatný znak (ORA-00911)

  3. Jak upsert pandas DataFrame do PostgreSQL tabulky?

  4. Vytvořte sloupec „Poslední změna“ na serveru SQL Server