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.

  • 🔍 Główny cel: Klauzula WHERE ogranicza, których wierszy dotyczy polecenie, dlatego polecenia SELECT, UPDATE i DELETE wpływają tylko na pasujące wiersze.
  • 🔗 ROLNICZE Operasłup: Wiersze są zwracane tylko wtedy, gdy wszystkie warunki są spełnione, co zawęża zbiór wyników.
  • 🔀 OR Operasłup: Wiersze są zwracane, gdy dowolny pojedynczy warunek ma wartość true, co poszerza zestaw wyników.
  • 📋 W i NIE W: Słowo kluczowe IN pasuje do listy wartości w jednym wyrażeniu, natomiast NOT IN wyklucza tę samą listę.
  • ⚖️. Porównanie Operatory: Kolumny liczbowe, tekstowe i daty filtrowane są według wartości: równe (=), większe niż (>), mniejsze niż (<) i różne od (<>).
  • ⚠️ Obsługa wartości NULL: NULL nigdy nie pasuje do = lub <>, więc do sprawdzania, czy występują brakujące wartości, wymagane są operatory IS NULL i IS NOT NULL.

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.

WHERE klauzula w MySQL

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

> 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

FAQ

GDZIE filtruje poszczególne wiersze przed grupąping, więc nie może odwoływać się do funkcji agregujących. HAVING filtruje grupy po wykonaniu GROUP BY, co czyni go właściwym miejscem dla warunków takich jak COUNT(*) > 5.

Użyj IS NULL lub IS NOT NULL. OperaZmienne takie jak = i <> w przypadku NULL zwracają wartość unknown, więc `postal_address` = NULL niczego nie powoduje, natomiast `postal_address` IS NULL działa.

Tak, gdy filtrowana kolumna zostanie zindeksowana, MySQL odczytuje tylko pasujące wiersze zamiast przeszukiwać tabelę. Zawińping kolumna w funkcji, np. YEAR(`date_of_birth`) = 1980, uniemożliwia użycie indeksu.

Tak. Asystenci AI zamieniają zwykły język angielski na SQL i MySQL Workbench można uruchomić wynik. RevPorównaj każdy warunek ze swoim schematem, ponieważ model może wymyślić nazwy kolumn.

Najpierw przetestuj to za pomocą SELECT. Błędna klauzula WHERE w Zapytanie DELETE lub UPDATE Można zmienić każdy wiersz. Podejrzyj dopasowane wiersze, a następnie ponownie użyj tego samego warunku do zapisu.

Podsumuj ten post następująco: