Изявление WHERE на SQL Въведение
- Клаузата WHERE се използва за включване на условие при извличане на данни от таблици.
- Когато трябва да посочите условие, което трябва да се спазва, докато данните се изтеглят от таблици, в този случай, когато се използва клауза.
- Клаузата Къде се използва за филтриране на записите, които извличате от оператора select, така че да получите по-малко подмножество от данни.
- Клаузата Where се използва и за извършване на операции за присъединяване.
- Клаузата Where връща само онези записи от таблицата, които отговарят на посоченото с нея условие.
- Тази клауза не се използва само със заявка SELECT, но може да се използва и със заявки UPDATE и DELETE.
- Използване на клауза where със заявка SELECT
- Клауза Къде със заявка SELECT за извличане на всички колони от таблица.
- За да извлечете всички записи от таблица, звездичка Използва се символ (*).
Синтаксис:
SELECT *FROM TABLE_NAME WHERE condition;
Пример:
Първо, ще създадем база данни с име “bookdb”. След това в тази база данни ще създадем таблица „книга“ и ще вмъкнем записи в таблицата. Ще разгледаме същата база данни и същата таблица за следващите примери.
Сега ще приложим клаузата where със заявка SELECT, за да извлечем всички колони от таблицата, където цената на книгата е равна на 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)
Има само един запис с Book_ID =4, чиято цена е равна на 200. Следователно се показват всички колони на този конкретен запис.
- Клауза Къде със заявка SELECT за извличане на една или повече от една конкретни колони от таблица.
- За да извлечете конкретни колони от таблица, имената на всички колони, които трябва да бъдат извлечени, трябва да бъдат посочени в самата заявка.
- Конкретните имена на колони, които трябва да бъдат извлечени, ще бъдат разделени със запетая.
Синтаксис:
SELECT COLUMN_NAME1,….,COLUMN_NAMEn FROM TABLE_NAME WHERE condition;
Пример:
Ще приложим клауза where със заявка SELECT, за да извлечем конкретни колони (Book_ID, Book_Price) от книгата таблица, където цената на книгата е 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)
Има само един запис с Book_ID =4, чиято цена е равна на 200. Следователно се показват Book_ID и Book_Price на този конкретен запис.
- Използване на клауза where със заявка UPDATE
Синтаксис:
UPDATE TABLE_NAME SET column_name = newvalue WHERE column_name1 = value1;
Пример:
Ще приложим клауза where със заявка UPDATE към таблицата book, за да актуализираме Book_Name и Book_Author на конкретен запис, като посочим Book_ID като условие в клаузата 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)
Има само един запис с Book_ID =3, променихме Book_name и Book_Author на този запис. Следователно се показва актуализирана таблица.
- Използване на клауза where със заявка DELETE
Синтаксис:
DELETE FROM TABLE_NAME WHERE column_name1 = value1;
Пример:
Ще приложим клаузата where със заявка DELETE към таблицата с книги към
изтрийте книга с конкретен Book_ID, като посочите Book_ID като условие в клаузата 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)
Има само един запис с Book_ID =5, ние изтрихме целия този запис от таблицата на книгата. Следователно се показва актуализирана таблица.
Оператори с оператор WHERE
Можете да използвате оператори с клаузата where. Тези оператори могат да се използват заедно с клаузата where в заявките SELECT, UPDATE и DELETE.
- Равно(=)
Когато се използва оператор равен на (=) с клауза where, той ще извлече тези записи от таблицата навсякъде, където стойността на името на колоната, присъстваща в таблица, е равна на стойността на името на колоната, посочена в заявката.
Пример:
Ще приложим клаузата where със заявка SELECT, за да извлечем тези записи от таблицата, където цената на книгата е равна на 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)
Има само един запис с Book_ID =4, чиято цена е равна на 200. Следователно се показват всички колони на този конкретен запис.
- По-голямо от(>)
Когато се използва оператор по-голям от (>) с клауза Where, той ще извлече тези записи от таблицата, когато стойността на името на колоната, присъстваща в таблица, е по-голяма от стойността на името на колоната, посочена в заявката.
Пример:
Ще приложим клаузата where със заявка SELECT, за да извлечем тези записи от таблицата, където цената на книгата е по-голяма от 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)
Има три записа с Book_ID =1, 3 и 4, чиито цени са по-големи от 150. Следователно се показват всички колони на тези записи.
- По-малко от(<)
Когато операторът по-малко от(<) се използва с клауза where, той ще извлече тези записи от таблицата, когато стойността на името на колоната, присъстваща в таблица, е по-малка от стойността на името на колоната, посочена в заявката.
Пример:
Ще приложим клаузата where със заявка SELECT, за да извлечем тези записи от таблицата, където цената на книгата е по-малка от 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)
Има два записа с Book_ID =1 и 2, чиито цени са по-малки от 200. Следователно се показват всички колони на тези записи.
- По-голямо или равно (>=)
Когато операторът по-голям или равен(>=) се използва с клауза where, той ще извлече тези записи от таблицата, когато стойността на името на колоната, присъстваща в таблица, е по-голяма или равна на стойността на името на колоната, посочена в заявка.
Пример:
Ще приложим клаузата where със заявка SELECT, за да извлечем тези записи от таблицата, където цената на книгата е по-голяма или равна на 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)
Виждаме, че има четири записа с Book_ID =1, 2, 3 и 4, чиито цени са по-големи или равни на 150. Следователно се показват всички колони на тези записи.
- По-малко или равно (<=)
Когато операторът по-малко или равен (<=) се използва с клауза where, той ще извлече тези записи от таблицата, когато стойността на името на колоната, присъстваща в таблица, е по-малка или равна на стойността на името на колоната, посочено в заявката.
Пример:
Ще приложим клаузата where със заявка SELECT, за да извлечем тези записи от таблицата, където цената на книгата е по-малка или равна на 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)
Има три записа с Book_ID =1, 2 и 4, чиито цени са по-малки или равни на 200. Следователно се показват всички колони на тези записи.
- Не е равно (<>)
Когато не се използва операторът equal(<>) с клауза where, той ще извлече тези записи от таблицата, когато стойността на името на колоната, посочена в заявката, не съвпада със стойността на името на колоната, присъстваща в таблица.
Пример:
Ще приложим клаузата where със заявка SELECT, за да извлечем тези записи от таблицата, където цената на книгата не е равна на 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)
Има три записа с Book_ID =1, 2 и 4, чиито цени не са равни на 250. Следователно се показват всички колони на тези записи.