MySQL WHERE Клауза: И, ИЛИ, IN, NOT IN Пример за заявка

⚡ Умно обобщение

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

  • 🔍 Основна цел: Клаузата WHERE ограничава кои редове докосва даден оператор, така че SELECT, UPDATE и DELETE засягат само съвпадащи редове.
  • 🔗 И OperaТор: Редовете се връщат само когато всяко условие е вярно, което стеснява набора от резултати.
  • 🔀 OR OperaТор: Редовете се връщат, когато някое от условията се оцени като „true“, разширявайки резултатния набор.
  • 📋 ВЪТРЕ и НЕ ВЪТРЕ: Ключовата дума IN съпоставя списък със стойности в един израз, докато NOT IN изключва същия списък.
  • сравнение Operaторове: „Равно на (=), по-голямо от (>), по-малко от (<) и не е равно на (<>) филтрират числови, текстови и датни колони.
  • ⚠️ Обработка на NULL: NULL никога не съвпада с = или <>, така че IS NULL и IS NOT NULL са необходими за проверка за липсващи стойности.

Какво представлява клаузата WHERE в MySQL?

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

Разгледахме как да правим заявки за данни от a база данни използвайки оператора SELECT в предишния урок. Операторът SELECT върна всички резултати от заявената таблица на базата данни.

Има обаче случаи, когато искаме да ограничим резултатите от заявката до определено условие. Клаузата WHERE в SQL е полезна в такива ситуации и работи по същия начин в... Заявка за ИЗТРИВАНЕ или АКТУАЛИЗИРАНЕ както се прави в SELECT заявка.

WHERE клауза в MySQL

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 email
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 email
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 email
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 email
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

Въпроси и Отговори

WHERE филтрира отделни редове преди групатаping, така че не може да се позовава на агрегатни функции. HAVING филтрира групите след изпълнението на GROUP BY, което го прави подходящо място за условия като COUNT(*) > 5.

Използвайте IS NULL или IS NOT NULL. OperaФункции като = и <> връщат неизвестно за NULL, така че `postal_address` = NULL не съвпада с нищо, докато `postal_address` IS NULL работи.

Да, когато филтрираната колона е индексирана, MySQL чете само съвпадащи редове, вместо да сканира таблицата.ping Колона във функция, като например YEAR(`date_of_birth`) = 1980, предотвратява използването на индекс.

Да. Асистентите с изкуствен интелект превръщат обикновения английски в SQL и MySQL Workbench може да изпълни резултата. RevПрегледайте всяко условие спрямо вашата схема, защото моделът може да измисли имена на колони.

Първо го тествайте със SELECT. Грешна клауза WHERE на Заявка за ИЗТРИВАНЕ или АКТУАЛИЗИРАНЕ може да променя всеки ред. Прегледайте съвпадащите редове, след което използвайте повторно същото условие за запис.

Обобщете тази публикация с: