MySQL WHERE Клауза: И, ИЛИ, IN, NOT IN Пример за заявка
⚡ Умно обобщение
MySQL Клаузата WHERE филтрира редовете, преди да достигнат резултатния набор, прилагайки точни критерии към операторите SELECT, UPDATE и DELETE. Разбирането на операторите AND, OR, IN, NOT IN и сравнението позволява на начинаещите да извличат точно записите, необходими на заявката.

Какво представлява клаузата WHERE в MySQL?
КЪДЕ клауза in MySQL е ключова дума, използвана за указване на точните критерии за данни или редове, които ще бъдат засегнати от посочения SQL оператор. Клаузата WHERE може да се използва с SQL изрази като INSERT, UPDATE, SELECT и DELETE за филтриране на записи и извършване на различни операции върху данните.
Разгледахме как да правим заявки за данни от a база данни използвайки оператора SELECT в предишния урок. Операторът SELECT върна всички резултати от заявената таблица на базата данни.
Има обаче случаи, когато искаме да ограничим резултатите от заявката до определено условие. Клаузата WHERE в SQL е полезна в такива ситуации и работи по същия начин в... Заявка за ИЗТРИВАНЕ или АКТУАЛИЗИРАНЕ както се прави в SELECT заявка.
WHERE клауза Синтаксис
Основният синтаксис на клаузата WHERE е следният.
SELECT * FROM tableName WHERE condition;
ТУК
- „ИЗБЕРЕТЕ * ОТ име на таблица“ е стандартът SELECT израз
- „КЪДЕ“ е ключовата дума, която ограничава резултатния набор, и „състояние“ е филтърът, приложен към резултатите. Филтърът може да бъде диапазон, единична стойност или подзаявка.
Да предположим, че искаме данни за член от таблицата members, при даден номер на членство 1. Скриптът по-долу постига това.
SELECT * FROM `members` WHERE `membership_number` = 1;
Изпълнението на този скрипт в MySQL работна маса в „myflixdb“ дава резултата по-долу.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
Едно условие рядко е достатъчно. Разделите по-долу комбинират WHERE с логически оператори.
Клауза WHERE в комбинация с – И ЛОГИЧНО OperaTor
С логическия оператор AND, ред се връща само ако са изпълнени ВСИЧКИ зададени критерии.
Да предположим, че искаме всички филми от категория 2, които са издадени през 2008 г. Сценарият по-долу постига това.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
Изпълнението на горния скрипт спрямо „myflixdb“ води до следния резултат.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
И стеснява набора от резултати. ИЛИ го разширява.
Клауза WHERE в комбинация с – OR ЛОГИЧНО OperaTor
С оператора OR се връща ред, ако е изпълнен КОЙТО И ДА Е от посочените критерии.
Следният скрипт класира всички филми в категория 1 или категория 2.
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
Резултатният набор е показан по-долу.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Свързването на много ИЛИ условия става трудно за четене. Ключовата дума IN решава този проблем.
Клауза WHERE в комбинация с – IN Ключова дума
Клаузата WHERE, когато се използва с ключовата дума IN, засяга само редове, чиито стойности съответстват на предоставения списък. IN намалява броя на клаузите OR, които иначе бихте написали.
По-долу MySQL Заявката WHERE IN връща редове, където membership_number е 1, 2 или 3.
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
Резултатният набор е показан по-долу.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
NOT IN изпълнява обратния филтър.
Клауза WHERE в комбинация с – НЕ В Ключова дума
С ключовата дума NOT IN, клаузата WHERE изключва всеки ред, чиято стойност съответства на предоставения списък.
Следната заявка дава редове, където membership_number НЕ е 1, 2 или 3.
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
Резултатният набор е показан по-долу.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
WHERE също филтрира стойностите по размер и равенство, използвайки оператори за сравнение.
Клауза WHERE в комбинация с – СРАВНЕНИЕ Operaтори
Операторите за сравнение „по-малко от“ (<), „равно на“ (=), „по-голямо от“ (>) и „не е равно на“ (<>) могат да се използват с клаузата WHERE.
= Равна на
Следният скрипт извлича всички членове от женски пол от таблицата с членове, използвайки оператора за равно на сравнение.
SELECT * FROM `members` WHERE `gender` = 'Female';
Резултатният набор е показан по-долу.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> По-велик от
Следният скрипт получава всички плащания, които са по-големи от 2,000 от таблицата с плащания.
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
Резултатният набор е показан по-долу.
| payment_id | membership_number | payment_date | description | amount_paid | external_reference_number |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Movie rental payment | 2500 | 11 |
| 3 | 3 | 30-07-2012 | Movie rental payment | 6000 | NULL |
<> Не е равно на
Следният скрипт получава всички филми, чийто идентификатор на категория не е 1.
SELECT * FROM `movies` WHERE `category_id` <> 1;
Резултатният набор е показан по-долу.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 5 | Daddy's Little Girls | NULL | 2007 | 8 |
| 6 | Angels and Demons | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | John Schultz | 2005 | 8 |
Бърза справка: Клауза WHERE Operaтори
Операторите, които най-често се използват в комбинация с WHERE, са обобщени по-долу. Пълните дефиниции са показани в MySQL референтен номер на оператора.
| OperaTor | Значение | Примерно условие |
|---|---|---|
| = | Равна на | `gender` = 'Женски' |
| <> | Не е равно на | `category_id` <> 1 |
| > / | По-голямо от / по-малко от | `платена_сума` > 2000 |
| И / ИЛИ | Всички критерии / всякакви критерии | `category_id` = 2 И `year_released` = 2008 |
| ВЪТРЕ / НЕ ВЪТРЕ | Съвпада / изключва списък | `номер_на_членство` IN (1,2,3) |
| Е НУЛА / НЕ Е НУЛА | Тестове за липсващи стойности | `postal_address` Е NULL |
⚠️ Забележка: NULL никога не съвпада с = или <>. Използвайте IS NULL или IS NOT NULL, когато колоната може да не съдържа стойност.
Главоблъсканица: Намерете филми, върнати със закъснение
Да предположим, че искаме да получим наетите филми, които не са върнати до крайния срок 25.06.2012 г. Комбинирането на WHERE с оператора „по-малко от“ и AND постига това.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
Изпълнение на горния скрипт в MySQL workbench дава следните резултати.
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |

