Какво представлява клаузата WHERE в MySQL?
Клаузата WHERE в MySQL е ключова дума, използвана за определяне на точните критерии на данни или редове, които ще бъдат засегнати от посочения SQL оператор. Клаузата WHERE може да се използва с SQL изрази като INSERT, UPDATE, SELECT и DELETE за филтриране на записи и извършване на различни операции с данните.
Разгледахме как да търсим данни от база данни, използвайки оператора SELECT в предишния урок. Операторът SELECT връща всички резултати от заявената таблица на базата данни.
Това са случаи обаче, когато искаме да ограничим резултатите от заявката до определено условие. Клаузата WHERE в SQL е полезна в такива ситуации.

Клауза WHERE Синтаксис
Основният синтаксис за клаузата WHERE, когато се използва в оператора MySQL SELECT WHERE, е както следва.
SELECT * FROM tableName WHERE condition;
ТУК
- "SELECT * FROM tableName" е стандартният SELECT оператор
- „WHERE“ е ключовата дума, която ограничава нашия набор от резултати от заявка за избор, а „условие“ е филтърът, който трябва да се приложи към резултатите. Филтърът може да бъде диапазон, единична стойност или подзаявка.
Нека сега разгледаме практически пример .
Да предположим, че искаме да получим лични данни на даден член от таблицата на членовете, като се има предвид членския номер 1, бихме използвали следния скрипт, за да постигнем това.
SELECT * FROM `members` WHERE `membership_number` = 1;
Изпълнението на горния скрипт в MySQL workbench на "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 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
Клауза WHERE, комбинирана с - AND LOGICAL Operator
Условието WHERE в MySQL, когато се използва заедно с логическия оператор AND, се изпълнява само ако са изпълнени ВСИЧКИ посочени критерии за филтриране. Нека сега разгледаме практически пример - Да предположим, че искаме да получим списък на всички филми от категория 2, които бяха пуснати през 2008 г., бихме използвали скрипта, показан по-долу, да постигнем това.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
Изпълнението на горния скрипт в MySQL workbench срещу "myflixdb" води до следните резултати.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Клауза WHERE, комбинирана с - ИЛИ ЛОГИЧЕСКИ Оператор
Клаузата WHERE, когато се използва заедно с оператора OR, се изпълнява само ако е изпълнен някой или целият посочен критерий за филтриране. Следният скрипт включва всички филми от категория 1 или категория 2SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
Изпълнението на горния скрипт в MySQL workbench срещу "myflixdb" води до следните резултати.
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 |
Клауза WHERE, комбинирана с - IN Ключова дума
Клаузата WHERE в MySQL, когато се използва заедно с ключовата дума IN, засяга само редовете, чиито стойности съответстват на списъка със стойности, предоставен в ключовата дума IN. Изявлението MySQL IN помага да се намали броят на клаузите OR, които може да се наложи да използвате. Следващата заявка MySQL WHERE IN дава редове, където членското_ число е 1, 2 или 3SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
Изпълнението на горния скрипт в MySQL workbench срещу "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 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | This email address is being protected from spambots. You need JavaScript enabled to view it. |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
Клауза WHERE, комбинирана с - NOT IN Keyword
Клаузата WHERE, когато се използва заедно с ключовата дума NOT IN НЕ влияе на редовете, чиито стойности съответстват на списъка със стойности, предоставен в ключовата дума NOT IN. Следващата заявка дава редове, в които член_номер НЕ е 1, 2 или 3SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
Изпълнението на горния скрипт в MySQL workbench срещу "myflixdb" води до следните резултати.
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= Равно на
Следният скрипт получава всички женски членове от таблицата на членовете, използвайки оператора за равен на сравнение.SELECT * FROM `members` WHERE `gender` = 'Female';
Изпълнението на горния скрипт в MySQL workbench срещу "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 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | This email address is being protected from spambots. You need JavaScript enabled to view it. |
4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> По-голямо от
Следният скрипт получава всички плащания, които са по-големи от 2000 от таблицата за плащания. ИЗБЕРЕТЕ * ОТ `плащания` КЪДЕ` сума_платена`> 2000; Изпълнението на горния скрипт в MySQL workbench срещу "myflixdb" води до следните резултати.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;Изпълнението на горния скрипт в MySQL workbench срещу "myflixdb" води до следните резултати.
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 |
Обобщение
- Клаузата SQL WHERE се използва за ограничаване на броя на редовете, засегнати от заявка SELECT, UPDATE или DELETE.
- Условието WHERE в SQL може да се използва заедно с логически оператори като AND и OR, оператори за сравнение като, = и т.н.
- Когато се използва с логическия оператор И, всички критерии трябва да бъдат изпълнени.
- Когато се използва с логическия оператор OR, трябва да бъде изпълнен някой от критериите.
- Ключовата дума IN се използва за избор на редове, съответстващи на списък със стойности.
Brain Teaser Нека предположим, че искаме да получим списък с наети филми, които не са върнати навреме на 25/06/2012. Можем да използваме клаузата на оператора SQL 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 |