Oświadczenie SQL WHERE Wprowadzenie
- Klauzula WHERE jest używana do włączenia warunku podczas pobierania danych z tabel.
- Kiedy musisz określić warunek, który musi być spełniony, gdy dane są pobierane z tabel, w takim przypadku, gdy używana jest klauzula.
- Gdzie klauzula jest używana do filtrowania rekordów, które pobierasz z instrukcji select, dzięki czemu otrzymujesz mniejszy podzbiór danych.
- Gdzie klauzula jest również używana do wykonywania operacji łączenia.
- Gdzie klauzula zwraca tylko te rekordy z tabeli, które spełniają określony w niej warunek.
- Ta klauzula jest używana nie tylko z zapytaniem SELECT, ale może być również używana z zapytaniami UPDATE i DELETE.
- Używanie klauzuli where z zapytaniem SELECT
- Klauzula WHERE z zapytaniem SELECT do pobrania wszystkich kolumn z tabeli.
- Aby pobrać wszystkie rekordy z tabeli, gwiazdka Używany jest symbol (*).
Składnia:
SELECT *FROM TABLE_NAME WHERE condition;
Przykład:
Najpierw utworzymy bazę danych o nazwie „bookdb”. Następnie w tej bazie utworzymy „książkę” tabeli i wstawimy rekordy do tabeli. W kolejnych przykładach rozważymy tę samą bazę danych i tę samą tabelę.
Teraz zastosujemy klauzulę where z zapytaniem SELECT, aby pobrać wszystkie kolumny z tabeli, w której cena książki jest równa 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)
Jest tylko jeden rekord z Book_ID =4, którego cena jest równa 200. Dlatego wyświetlane są wszystkie kolumny tego konkretnego rekordu.
- Klauzula WHERE z zapytaniem SELECT do pobrania jednej lub więcej niż jednej określonej kolumny z tabeli.
- Aby pobrać określone kolumny z tabeli, nazwy wszystkich kolumn, które mają być pobrane, powinny być określone w samym zapytaniu.
- Określone nazwy kolumn, które mają zostać pobrane, zostaną oddzielone przecinkiem.
Składnia:
SELECT COLUMN_NAME1,….,COLUMN_NAMEn FROM TABLE_NAME WHERE condition;
Przykład:
Zastosujemy klauzulę where z zapytaniem SELECT, aby pobrać określone kolumny (Book_ID, Book_Price) z książki tabela, w której cena książki wynosi 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)
Jest tylko jeden rekord z Book_ID =4, którego cena jest równa 200. W związku z tym wyświetlane są Book_ID i Book_Price tego konkretnego rekordu.
- Używanie klauzuli where z zapytaniem UPDATE
Składnia:
UPDATE TABLE_NAME SET column_name = newvalue WHERE column_name1 = value1;
Przykład:
Zastosujemy klauzulę WHERE z zapytaniem UPDATE w tabeli książek, aby zaktualizować Nazwa_księgi i Autor_książki określonego rekordu przez określenie identyfikatora Księgi jako warunku w klauzuli WHER.
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)
Jest tylko jeden rekord z ID_księgi =3, zmieniliśmy nazwę księgi i autora księgi tego rekordu. Dlatego wyświetlana jest zaktualizowana tabela.
- Używanie klauzuli where z zapytaniem DELETE
Składnia:
DELETE FROM TABLE_NAME WHERE column_name1 = value1;
Przykład:
Zastosujemy klauzulę where z zapytaniem DELETE w tabeli książek do
usuń książkę o określonym identyfikatorze Book_ID, określając identyfikator Book_ID jako warunek w 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)
Jest tylko jeden rekord z Book_ID =5, usunęliśmy cały ten rekord z tabeli księgi. Dlatego wyświetlana jest zaktualizowana tabela.
Operatorzy z oświadczeniem WHERE
Operatorów można używać z klauzulą where. Operatorów tych można używać razem z klauzulą WHERE w zapytaniach SELECT, UPDATE i DELETE.
- Równe(=)
W przypadku użycia operatora równego (=) z klauzulą WHERE, zostaną one pobrane z tabeli, jeśli wartość nazwy kolumny w tabeli jest równa wartości nazwy kolumny określonej w zapytaniu.
Przykład:
Zastosujemy klauzulę where z zapytaniem SELECT, aby pobrać te rekordy z tabeli, w której cena książki jest równa 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)
Jest tylko jeden rekord z Book_ID =4, którego cena jest równa 200. Dlatego wyświetlane są wszystkie kolumny tego konkretnego rekordu.
- Większe niż(>)
Gdy operator większa niż (>) jest używany z klauzulą Where, pobierze te rekordy z tabeli, jeśli wartość nazwy kolumny w tabeli jest większa niż wartość nazwy kolumny określonej w zapytaniu.
Przykład:
Zastosujemy klauzulę where z zapytaniem SELECT, aby pobrać te rekordy z tabeli, w których cena książki jest większa niż 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)
Istnieją trzy rekordy z Book_ID =1, 3 i 4, których ceny są większe niż 150. Dlatego wyświetlane są wszystkie kolumny tych rekordów.
- Mniej niż(<)
Kiedy operator less than(<) jest używany z klauzulą WHERE, będzie pobierał te rekordy z tabeli, jeśli wartość nazwy kolumny w tabeli jest mniejsza niż wartość nazwy kolumny określonej w zapytaniu.
Przykład:
Zastosujemy klauzulę where z zapytaniem SELECT, aby pobrać te rekordy z tabeli, w których cena książki jest mniejsza niż 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)
Istnieją dwa rekordy z Book_ID =1 i 2, których ceny są mniejsze niż 200. Dlatego wyświetlane są wszystkie kolumny tych rekordów.
- Większe lub równe (>=)
Gdy operator większy lub równy (>=) jest używany z klauzulą WHERE, będzie on pobierał te rekordy z tabeli, jeśli wartość nazwy kolumny obecnej w tabeli jest większa lub równa wartości nazwy kolumny określonej w zapytanie.
Przykład:
Zastosujemy klauzulę where z zapytaniem SELECT, aby pobrać te rekordy z tabeli, w których cena książki jest większa lub równa 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)
Widzimy, że istnieją cztery rekordy z Book_ID =1, 2, 3 i 4, których ceny są większe lub równe 150. Stąd wyświetlane są wszystkie kolumny tych rekordów.
- Mniejsze lub równe (<=)
W przypadku użycia operatora mniejszego lub równego (<=) z klauzulą WHERE, będzie on pobierał te rekordy z tabeli, gdy wartość nazwy kolumny w tabeli jest mniejsza lub równa wartości nazwy kolumny określonej w zapytanie.
Przykład:
Zastosujemy klauzulę where z zapytaniem SELECT, aby pobrać te rekordy z tabeli, w których cena książki jest mniejsza lub równa 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)
Istnieją trzy rekordy z Book_ID =1, 2 i 4, których ceny są mniejsze lub równe 200. Dlatego wyświetlane są wszystkie kolumny tych rekordów.
- Różne (<>)
Gdy operator not equal(<>) jest używany z klauzulą where, pobierze te rekordy z tabeli, jeśli wartość nazwy kolumny określonej w zapytaniu nie jest zgodna z wartością nazwy kolumny obecnej w tabeli.
Przykład:
Zastosujemy klauzulę where z zapytaniem SELECT, aby pobrać te rekordy z tabeli, w których cena książki nie jest równa 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)
Istnieją trzy rekordy z Book_ID =1, 2 i 4, których ceny nie są równe 250. Dlatego wyświetlane są wszystkie kolumny tych rekordów.