MySQL WHERE Klauzula: AND, OR, IN, NOT IN Przykład zapytania
⚡ Inteligentne podsumowanie
MySQL Klauzula WHERE filtruje wiersze przed dotarciem do zbioru wyników, stosując precyzyjne kryteria do poleceń SELECT, UPDATE i DELETE. Zrozumienie operatorów AND, OR, IN, NOT IN i porównania pozwala początkującym użytkownikom pobrać dokładnie te rekordy, których wymaga zapytanie.
Co oznacza klauzula WHERE MySQL?
Klauzula WHERE in MySQL jest słowem kluczowym używanym do określenia dokładnych kryteriów danych lub wierszy, które będą podlegać określonemu poleceniu SQL. Klauzula WHERE może być używana z poleceniami SQL, takimi jak INSERT, UPDATE, SELECT i DELETE, aby filtrować rekordy i wykonywać różne operacje na danych.
Przyjrzeliśmy się, jak wysyłać zapytania do danych z pliku a baza danych używając instrukcji SELECT z poprzedniego samouczka. Instrukcja SELECT zwróciła wszystkie wyniki z zapytanej tabeli bazy danych.
Zdarzają się jednak sytuacje, w których chcemy ograniczyć wyniki zapytania do określonego warunku. Klauzula WHERE w SQL przydaje się w takich sytuacjach i działa w ten sam sposób w Zapytanie DELETE lub UPDATE tak jak ma to miejsce w zapytaniu SELECT.
Klauzula WHERE Składnia
Podstawowa składnia klauzuli WHERE jest następująca.
SELECT * FROM tableName WHERE condition;
TUTAJ
- „WYBIERZ * Z nazwy tabeli” jest standardem SELECT oświadczenie
- "GDZIE" jest słowem kluczowym ograniczającym zestaw wyników i "stan : schorzenie" to filtr zastosowany do wyników. Filtr może obejmować zakres, pojedynczą wartość lub podzapytanie.
Załóżmy, że chcemy uzyskać dane członka z tabeli members, mając podany numer członkostwa 1. Poniższy skrypt to umożliwia.
SELECT * FROM `members` WHERE `membership_number` = 1;
Wykonanie tego skryptu w MySQL Workbench w bazie danych „myflixdb” powstaje poniższy wynik.
| 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 |
Pojedynczy warunek rzadko wystarcza. Poniższe sekcje łączą WHERE z operatory logiczne.
Klauzula WHERE połączona z – ROLNICZE LOGICZNY OperaTor
W przypadku operatora logicznego AND wiersz jest zwracany tylko wtedy, gdy spełnione są WSZYSTKIE określone kryteria.
Załóżmy, że chcemy znaleźć wszystkie filmy z kategorii 2, które ukazały się w 2008 roku. Poniższy skrypt pozwala to osiągnąć.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
Wykonanie powyższego skryptu na bazie danych „myflixdb” daje następujący wynik.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
AND zawęża zbiór wyników. OR go poszerza.
Klauzula WHERE połączona z – OR LOGICZNY OperaTor
W przypadku operatora OR wiersz jest zwracany, jeżeli KTÓREKOLWIEK ze wskazanych kryteriów zostanie spełnione.
Poniższy skrypt pobiera wszystkie filmy z kategorii 1 lub 2.
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
Poniżej przedstawiono zestaw wyników.
| 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 |
Łączenie wielu warunków OR staje się trudne do odczytania. Słowo kluczowe IN rozwiązuje ten problem.
Klauzula WHERE połączona z – IN słowo kluczowe
Klauzula WHERE, używana ze słowem kluczowym IN, wpływa tylko na wiersze, których wartości pasują do podanej listy. Słowo kluczowe IN zmniejsza liczbę klauzul OR, które w przeciwnym razie należałoby napisać.
Poniższy MySQL Zapytanie WHERE IN zwraca wiersze, w których membership_number wynosi 1, 2 lub 3.
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
Poniżej przedstawiono zestaw wyników.
| 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 wykonuje odwrotny filtr.
Klauzula WHERE połączona z – NIE W słowo kluczowe
Dzięki słowu kluczowemu NOT IN klauzula WHERE wyklucza każdy wiersz, którego wartość pasuje do podanej listy.
Poniższe zapytanie zwraca wiersze, w których membership_number NIE jest równy 1, 2 ani 3.
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
Poniżej przedstawiono zestaw wyników.
| 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 filtruje również wartości według rozmiaru i równości, wykorzystując operatory porównania.
Klauzula WHERE połączona z – PORÓWNANIE Operatorsy
Operatory porównania mniejszy niż (<), równy (=), większy niż (>) i różny od (<>) można stosować z klauzulą WHERE.
= Równy
Poniższy skrypt pobiera wszystkie członkinie tabeli members za pomocą operatora porównania równość.
SELECT * FROM `members` WHERE `gender` = 'Female';
Poniżej przedstawiono zestaw wyników.
| 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 |
> Lepszy niż
Poniższy skrypt pobiera wszystkie płatności większe niż 2,000 z tabeli płatności.
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
Poniżej przedstawiono zestaw wyników.
| 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 |
<> Nierówne
Poniższy skrypt pobiera wszystkie filmy, których identyfikator kategorii jest różny od 1.
SELECT * FROM `movies` WHERE `category_id` <> 1;
Poniżej przedstawiono zestaw wyników.
| 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 |
Krótki przewodnik: klauzula WHERE Operatorsy
Poniżej podsumowano operatory najczęściej łączone z WHERE. Pełne definicje znajdują się w MySQL odniesienie do operatora.
| OperaTor | Znaczenie | Przykładowy stan |
|---|---|---|
| = | Równy | `płeć` = 'Kobieta' |
| <> | Nie równa się | `category_id` <> 1 |
| > / | Większy niż / mniejszy niż | `kwota_zapłacona` > 2000 |
| I/LUB | Wszystkie kryteria / dowolne kryteria | `category_id` = 2 ORAZ `year_released` = 2008 |
| W / NIE W | Pasuje do/wyklucza listę | `numer_członkostwa` IN (1,2,3) |
| JEST NULL / NIE JEST NULL | Testy na brakujące wartości | `postal_address` JEST NULL |
⚠️ Uwaga: NULL nigdy nie pasuje do = ani <>. Użyj IS NULL lub IS NOT NULL, gdy kolumna może nie zawierać żadnej wartości.
Łamigłówka: Znajdź filmy zwrócone za późno
Załóżmy, że chcemy odzyskać wypożyczone filmy, które nie zostały zwrócone do 25.06.2012 r. Połączenie operatora WHERE z operatorem „mniej niż” i operatorem AND pozwala to osiągnąć.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
Wykonanie powyższego skryptu w MySQL workbench daje następujące wyniki.
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |


