Co to jest klauzula WHERE w MySQL?
WHERE Klauzula w MySQL jest słowem kluczowym używanym do określenia dokładnych kryteriów danych lub wierszy, na które będzie miała wpływ określona instrukcja SQL. Klauzula WHERE może być używana z instrukcjami SQL, takimi jak INSERT, UPDATE, SELECT i DELETE, do filtrowania rekordów i wykonywania różnych operacji na danych.
Przyjrzeliśmy się, jak wysyłać zapytania do danych z bazy danych za pomocą instrukcji SELECT w poprzednim samouczku. Instrukcja SELECT zwróciła wszystkie wyniki z tabeli bazy danych, której dotyczyło zapytanie.
Są to jednak chwile, kiedy chcemy ograniczyć wyniki zapytania do określonego warunku. W takich sytuacjach przydatna jest klauzula WHERE w języku SQL.
Składnia klauzuli WHERE
Podstawowa składnia klauzuli WHERE używanej w instrukcji MySQL SELECT WHERE jest następująca.
SELECT * FROM tableName WHERE condition;
TUTAJ
- „SELECT * FROM tableName” to standardowa instrukcja SELECT
- „WHERE” to słowo kluczowe, które ogranicza nasz zestaw wyników zapytania wybierającego, a „warunek” to filtr stosowany do wyników. Filtr może być zakresem, pojedynczą wartością lub pod-zapytaniem.
Spójrzmy teraz na praktyczny przykład .
Załóżmy, że chcielibyśmy uzyskać dane osobowe członka z tabeli członków, biorąc pod uwagę numer członkostwa 1, użylibyśmy następującego skryptu, aby to osiągnąć.
SELECT * FROM `members` WHERE `membership_number` = 1;
Wykonanie powyższego skryptu w środowisku MySQL na „myflixdb” dałoby następujące wyniki.
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. |
Klauzula WHERE połączona z operatorem - AND LOGICAL
Warunek WHERE w MySQL używany razem z operatorem logicznym AND jest wykonywany tylko wtedy, gdy spełnione są WSZYSTKIE określone kryteria filtru. Spójrzmy teraz na praktyczny przykład - załóżmy, że chcemy uzyskać listę wszystkich filmów z kategorii 2, które zostały wydane w 2008 roku, skorzystamy z poniższego skryptu, aby to osiągnąć.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
Wykonanie powyższego skryptu w środowisku roboczym MySQL na serwerze „myflixdb” daje następujące wyniki.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Klauzula WHERE w połączeniu z operatorem - OR LOGICAL
Klauzula WHERE używana razem z operatorem OR jest wykonywana tylko wtedy, gdy spełnione jest dowolne lub wszystkie określone kryteria filtru. Poniższy skrypt pobiera wszystkie filmy z kategorii 1 lub 2SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
Wykonanie powyższego skryptu w środowisku roboczym MySQL na serwerze „myflixdb” daje następujące wyniki.
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 klauzula w połączeniu ze słowem kluczowym - IN
Klauzula WHERE in MySQL używana razem ze słowem kluczowym IN wpływa tylko na wiersze, których wartości są zgodne z listą wartości podaną w słowie kluczowym IN. Instrukcja MySQL IN pomaga zmniejszyć liczbę klauzul OR, których możesz potrzebować. Następująca kwerenda MySQL WHERE IN daje wiersze, w których numer_państwa wynosi 1, 2 lub 3SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
Wykonanie powyższego skryptu w środowisku roboczym MySQL na serwerze „myflixdb” daje następujące wyniki.
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 klauzula w połączeniu ze słowem kluczowym - NOT IN
Klauzula WHERE używana razem ze słowem kluczowym NOT IN NIE wpływa na wiersze, których wartości są zgodne z listą wartości podaną w słowie kluczowym NOT IN. Poniższe zapytanie daje wiersze, w których numer_państw NIE jest 1, 2 ani 3SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
Wykonanie powyższego skryptu w środowisku roboczym MySQL na serwerze „myflixdb” daje następujące wyniki.
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 klauzula połączona z - COMPARISON Operatory
Operatory porównania mniejsze niż (), równe (=), różne od () mogą być używane z klauzulą WHERE= Równe
Poniższy skrypt pobiera wszystkie członki żeńskie z tabeli członków przy użyciu operatora równości z porównaniem.SELECT * FROM `members` WHERE `gender` = 'Female';
Wykonanie powyższego skryptu w środowisku roboczym MySQL na serwerze „myflixdb” daje następujące wyniki.
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 |
> Większy niż
Poniższy skrypt pobiera wszystkie płatności, które są większe niż 2000 z tabeli płatności. SELECT * FROM `payment` WHERE` amount_paid`> 2000; Wykonanie powyższego skryptu w środowisku roboczym MySQL na serwerze „myflixdb” daje następujące wyniki.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 |
<> Nie równe
Poniższy skrypt pobiera wszystkie filmy, których identyfikator kategorii jest różny od 1.SELECT * FROM `movies` WHERE `category_id`<> 1;Wykonanie powyższego skryptu w środowisku roboczym MySQL na serwerze „myflixdb” daje następujące wyniki.
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 |
Podsumowanie
- Klauzula SQL WHERE służy do ograniczenia liczby wierszy, na które ma wpływ zapytanie SELECT, UPDATE lub DELETE.
- Warunek WHERE w języku SQL może być używany w połączeniu z operatorami logicznymi, takimi jak AND i OR, operatorami porównania, takimi jak, = itp.
- W przypadku użycia z operatorem logicznym AND wszystkie kryteria muszą być spełnione.
- W przypadku użycia z operatorem logicznym OR każde kryterium musi być spełnione.
- Słowo kluczowe IN służy do wybierania wierszy pasujących do listy wartości.
Łamigłówka Załóżmy, że chcemy uzyskać listę wypożyczonych filmów, które nie zostały zwrócone w terminie 25.06.2012. Aby to osiągnąć, możemy użyć klauzuli instrukcji SQL WHERE razem z operatorem mniej niż porównania i operatorem logicznym AND.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;Wykonanie powyższego skryptu w środowisku roboczym MySQL 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 |