W tym artykule omówimy WHERE
klauzula i jak jej używać w MySQL. Poza SELECT
, zakres WHERE
klauzula zawiera UPDATE
i DELETE
sprawozdania. WHERE
klauzula jest niezbędna do jakościowej pracy z bazami danych MySQL. Dlatego w bieżącym artykule omówimy tę klauzulę i dogłębnie omówimy jej wyróżniające cechy.
Kiedy mamy do czynienia z MySQL, w bezwzględnej większości przypadków potrzebujemy klauzul warunkowych dla instrukcji SELECT. Takie klauzule określają kryteria wyboru, więc otrzymujemy tylko te dane, których potrzebujemy.
MySQL WHERE
klauzula jest najłatwiejszym sposobem filtrowania wyników. Jest elastyczny, pozwala użytkownikom określić różne warunki selekcji danych i połączyć kilka warunków w jednym zestawieniu. Aby uczynić codzienną rutynę pracy jeszcze przyjemniejszą, zawsze lepiej jest uciekać się do profilowania MySQL i optymalizacji zapytań.
Zawartość
- Składnia MySQL WHERE
- Używanie WHERE w MySQL
- GDZIE przykład zapytania z pojedynczym warunkiem
- Wiele warunków WHERE
- GDZIE I operator
- GDZIE OR operator
- Używanie AND z warunkami OR
- GDZIE MIĘDZY operatorem
- Operator GDZIE PODOBNE
- GDZIE NIE PODOBA, przykład
- GDZIE W operatorze
- GDZIE NIE W przykładzie
- GDZIE JEST NULL operator
- GDZIE NIE JEST NULL, przykład
- GDZIE NIE ISTNIEJE
- GDZIE ISTNIEJE
- Używanie klauzuli WHERE MySQL z operatorami porównania
- Podsumowanie
Składnia MySQL WHERE
Na początek przyjrzyjmy się bliżej użyciu WHERE
w SELECT
oświadczenie. Podstawowa składnia jest następująca:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
SELECT … FROM
to standardowa instrukcja definiująca, na które kolumny i na którą tabelę celujemy. WHERE
słowo kluczowe identyfikuje kryteria wyboru danych. Może istnieć pojedyncza wartość, zakres między wartościami, podzapytanie i więcej niż jeden warunek.
Automatyzuj swoją pracę za pomocą kryteriów zapytań. Zobacz i edytuj je wizualnie na osobnych kartach naszej wizualizacji Narzędzie do zapytań MySQL gdzie rysujesz zapytanie. Nie musisz wpisywać nazw kolumn ani zapamiętywać skomplikowanych reguł. Wystarczy wybrać żądane dane z list i cieszyć się wynikami.
Używanie WHERE w MySQL
MySQL działa w następujący sposób podczas wykonywania SELECT
instrukcja zawierająca WHERE
klauzula:
- Oceń
FROM
klauzula identyfikująca tabelę docelową. - Przejdź do
WHERE
klauzula oceny kryteriów wyboru danych. - Sprawdź
SELECT
instrukcja do zdefiniowania kolumn do pobrania.
Uwaga :SELECT
instrukcja często zawiera ORDER BY
klauzula, która umieszcza wyniki w porządku rosnącym lub malejącym. Jeśli tak, MySQL oceni to na końcu.
Zasada działania MySQL WHERE
jest podobny do IF
stan w językach programowania. Porównuje podane przez nas wartości z wartościami w docelowej tabeli MySQL. Gdy te wartości są zgodne, RDBMS pobiera te rekordy do użytkowników.
Gdy warunek WHERE
klauzula jest wartością tekstową, którą umieszczamy w apostrofach. Jednak w przypadku wartości liczbowych nie są wymagane żadne cudzysłowy.
SELECT first_name, last_name, city
FROM Readers
WHERE City = ‘Seattle’;
SELECT *
FROM Readers
WHERE CustomerID = 24;
Zwiększ swoje umiejętności skryptowania dzięki zaawansowanemu formaterowi MySQL, który pozwala upiększyć kod, aby uzyskać go dokładnie tak, jak lubisz.
Teraz przejrzyjmy użycie WHERE
klauzula. Obejmuje wiele konkretnych przypadków. Najlepszym sposobem na ich zbadanie jest odwołanie się do praktycznego MySQLa WHERE
przykład dla każdego scenariusza.
GDZIE zapytanie z pojedynczym warunkiem, przykład
Najprostszym scenariuszem użycia tej klauzuli jest MySQL WHERE
posiadanie jednego kryterium doboru danych. Załóżmy, że jakaś firma chce pobrać listę swoich pracowników pracujących w dziale obsługi klienta jako menedżerowie wsparcia:
SELECT
last_name,
first_name,
job_title
FROM
employees
WHERE
jobtitle = 'Support';
Kwerenda pobierze dane od pracowników tabeli i filtruj rekordy zgodnie z wartością w job_title kolumna. Powinien zwracać listę wszystkich nazwisk i imion wszystkich pracowników, którzy pracują jako menedżerowie wsparcia. Dane wyjściowe znajdują się poniżej:
nazwisko | imię | job_title |
Lis | Mary | Wsparcie |
Czarny | Jan | Wsparcie |
Johnson | Steve | Wsparcie |
Hudson | Diana | Wsparcie |
Williams | Katie | Wsparcie |
Zielony | Jake | Wsparcie |
Uwaga :Koduj mniej i osiągaj więcej dzięki sprawdzaniu składni MySQL. dbForge Studio dla MySQL to bogate w funkcje IDE zaprojektowane w celu ułatwienia rozwoju, utrzymania i administrowania bazami danych MySQL i MariaDB.
Wiele warunków WHERE
Powyższy przykład dowodzi, że MySQL WHERE
Klauzula dostarcza dane pasujące do warunku. W tym przypadku odfiltrowano wszystkich pracowników o określonym stanowisku. Jednak często musimy ustawić kilka kryteriów, aby pobrać dane. Jest to wykonalne – musimy zastosować MySQL WHERE
z określonymi operatorami – AND
operator i OR
operator.
GDZIE I operator
Zróbmy nasz poprzedni przykład nieco bardziej skomplikowany. Chcemy listę pracowników zatrudnionych w Dziale Wsparcia, zatrudnionych w zeszłym roku.
Aby to osiągnąć, ustawimy dwa warunki i połączymy je za pomocą AND
operator logiczny:
SELECT
last_name,
first_name,
job_title,
hire_year
FROM
employees
WHERE
jobtitle = 'Support' AND
hire_year = 2021;
Wynik:
nazwisko | imię | job_title | rok zatrudnienia |
Lis | Mary | Wsparcie | 2021 |
Czarny | Jan | Wsparcie | 2021 |
Johnson | Steve | Wsparcie | 2021 |
Samo pisanie kodu zajmuje lwią część całkowitego czasu, jaki poświęcasz na tworzenie i administrowanie bazami danych. Podwój szybkość kodowania dzięki udoskonalonemu i zoptymalizowanemu edytorowi kodu MySQL Server, który jest dostarczany z dbForge Studio dla MySQL.
GDZIE OR operator
Korzystanie z OR
operator logiczny to kolejna metoda pracy z kilkoma warunkami w MySQL WHERE
klauzula. Jeśli prześlemy to zapytanie, zwróci ono dane pasujące do ustalonych przez nas kryteriów.
Firma chce sprawdzić stałych klientów pochodzących z dwóch miast. W tym celu określimy te miasta i użyjemy OR
operatora.
SELECT
lastName,
firstName,
city
FROM
customers
WHERE
city = 'Seattle' OR
city = 'Bellevue';
nazwisko | imię | miasto |
Anderson | Mary | Seattle |
Czarny | Jan | Seattle |
Thompson | Steve | Belevue |
Kowalski | Diana | Belevue |
Williams | Katie | Seattle |
Piotrowie | Jake | Seattle |
Używanie AND z warunkami OR
MySQL pozwala na połączenie MySQL WHERE AND OR
– oba operatory logiczne mogą występować w jednej instrukcji. W takim przypadku MySQL sprawdzi jednocześnie trzy warunki.
Na przykład biblioteka chce uzyskać informacje o swoich czytelnikach mieszkających w Bellevue, którzy stali się stałymi czytelnikami biblioteki w 2021 r. lub przeczytali ponad 20 książek.
W tym przypadku MySQL WHERE
ciąg staje się bardziej złożony. Aby dopasować i zorganizować AND
&OR
warunków, używamy nawiasów, aby określić, w jaki sposób MySQL musi je ocenić.
Spójrz na poniższy przykład:
SELECT *
FROM readers
WHERE (city = 'Bellevue' AND reg_year = '2020')
OR (books_read > 20);
Wynik:
nazwisko | imię | miasto | reg_year | books_read |
Anderson | Mary | Seattle | 2021 | 25 |
Jones | Chris | Belevue | 2020 | 12 |
Thompson | Lora | Seattle | 2020 | 35 |
Farrel | Brian | Belevue | 2021 | 48 |
Kowalski | Jeff | Belevue | 2020 | 50 |
Piotrowie | Anna | Belevue | 2020 | 10 |
Patterson | Jan | Belevue | 2020 | 11 |
Ten wynik pokazuje niektóre wyniki pasujące do stanu miasta zamieszkania + rok rejestracji. Zawiera również wyniki spełniające drugi warunek, czyli przeczytanie ponad 20 książek.
GDZIE POMIĘDZY operatorem
Operator BETWEEN pozwala na ustawienie szerszych limitów. Załóżmy, że biblioteka chce uzyskać listę swoich czytelników, którzy dołączyli w 2019, 2020 i 2021. Zamiast wysyłać kilka zapytań lub używać AND
operatora, możemy ustawić zakres dla WHERE
warunek za pomocą BETWEEN
operator.
Aby pobrać listę czytelników dołączających w latach 2019-2022, przesyłamy następujące zapytanie:
SELECT
last_Name,
first_Name,
reg_year
FROM
readers
WHERE
reg_year BETWEEN 2019 AND 2021
ORDER BY reg_year;
Wynik:
nazwisko | imię | reg_year |
Anderson | Mary | 2019 |
Jones | Chris | 2019 |
Thompson | Lora | 2019 |
Farrel | Brian | 2019 |
Kowalski | Jeff | 2020 |
Piotrowie | Anna | 2020 |
Patterson | Jan | 2020 |
Williams | Zaznacz | 2021 |
Wycieczki | Andrzej | 2021 |
Przyznaj | Walentyna | 2021 |
operator WHERE LIKE
Zastosowanie operatora LIKE umożliwia użycie klauzuli WHERE do wybrania określonych rekordów zawierających określony wzorzec. Aby zdefiniować ten wzorzec, używamy znaku procentu (%) w celu zastąpienia znaku lub ciągu kilku znaków o dowolnej długości.
Najpopularniejsze wzorce dla MySQL SELECT WHERE LIKE
są następujące:
WHERE
wartość LIKE 'abc%
‘ – wyszukuje i zwraca wszystkie wartości zaczynające się od „abc”
WHERE
wartość LIKE '%abc'
– znajduje i zwraca wszystkie wartości kończące się na „abc”
WHERE
wartość LIKE '%abc%'
– znajduje i zwraca wartości mające „abc” w dowolnym miejscu między początkiem a końcem
Rzućmy okiem na WHERE LIKE
przykład. Firma chce zdobyć listę swoich klientów z USA i Wielkiej Brytanii. Zapytanie jest następujące:
SELECT ContactName, Country, City
FROM Customers
WHERE Country LIKE 'U%'
ORDER BY ContactName;
Dane wyjściowe to:
Nazwa kontaktu | Kraj | Miasto |
Helen Bennett | Wielka Brytania | Cowes |
Simon Crowther | Wielka Brytania | Londyn |
Hari Kumar | Wielka Brytania | Londyn |
Howard Snyder | USA | Eugeniusz |
Latimer Yoshi | USA | Elgin |
John Steel | USA | Walla Walla |
Jaime Torres | USA | San Francisco |
Fran Wilson | USA | Portland |
GDZIE NIE PODOBA
Jest jeszcze inny przypadek, w którym musisz wykluczyć niektóre dane z wyników. Możemy użyć MySQL WHERE NOT LIKE
operator. Znajduje i zwraca dane, które nie mają określonych znaków.
Firma chce mieć listę swoich klientów ze wszystkich krajów z wyjątkiem Wielkiej Brytanii i USA. Składnia WHERE NOT LIKE
w MySQL będzie wyglądać jak poniżej:
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT LIKE 'U%'
ORDER BY Country;
Wynik:
Nazwa kontaktu | Kraj | Miasto |
Roland Mendel | Austria | Graz |
Georg Pipps | Austria | Salzburg |
Catherine Dewey | Belgia | Bruksela |
Pascale Cartrain | Belgia | Charleroi |
Elizabeth Lincoln | Kanada | Tsawassen |
Yoshi Tannamuri | Kanada | Vancouver |
Jean Fresnière | Kanada | Montréal |
Jytte Petersen | Dania | Kbenhavn |
Balle Ibsen | Dania | Århus |
Pirkko Koskitalo | Finlandia | Oulu |
Matti Karttunen | Finlandia | Helsinki |
Annette Roulet | Francja | Tuluza |
Marie Bertrand | Francja | Paryż |
Maria Anders | Niemcy | Berlin |
Hanna Mooss | Niemcy | Mannheim |
operator WHERE IN
Korzystanie z IN
i NOT IN
słowa kluczowe to kolejna opcja filtrowania wierszy i pobierania tylko części danych, która odpowiada naszym ścisłym kryteriom. Głównym celem jest zmniejszenie liczby OR
klauzule w jednym SELECT
oświadczenie.
MySQL WHERE IN
odwołuje się do wierszy zawierających wartości określone dla WHERE
stan :schorzenie. Na przykład chcemy pobrać listę klientów, którzy mieszkają w kilku krajach europejskich. WHERE IN
składnia jest następująca w MySQL:
SELECT ContactName, Country, City
FROM Customers
WHERE Country IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
Pamiętaj, że umieszczamy nasze wartości określające warunek wyszukiwania w nawiasach. W przypadku pracy z wartościami tekstowymi musimy je wszystkie umieścić w apostrofach. Jeśli jednak nasze wartości i wartości liczbowe, wymienimy je bez pojedynczych cudzysłowów, np. (25, 35, 45).
Wyjście powyższego MySQL WHERE IN
klauzula w SELECT
oświadczenie to:
Nazwa kontaktu | Kraj | Miasto |
Catherine Dewey | Belgia | Bruksela |
Pascale Cartrain | Belgia | Charleroi |
Frédérique Citeaux | Francja | Strasburg |
Laurence Lebihans | Francja | Marsylia |
Janine Labrune | Francja | Nantes |
Martine Rance | Francja | Lille |
Aleksander Feuer | Niemcy | Leipzig |
Henriette Pfalzheim | Niemcy | Kolonia |
Horst Kloss | Niemcy | Cunewalde |
Karin Josephs | Niemcy | Münster |
Rita Müller | Niemcy | Stuttgart |
Thomas Hardy | Wielka Brytania | Londyn |
Victoria Ashworth | Wielka Brytania | Londyn |
Elizabeth Brown | Wielka Brytania | Manchester |
Ann Devon | Wielka Brytania | Londyn |
GDZIE NIE W przykładzie
Odwrotnym przypadkiem jest MySQL WHERE NOT IN
klauzula. Służy do upewnienia się, że zapytanie zignoruje wiersze zawierające wartości określone dla warunku. W powyższym przykładzie poprosiliśmy klientów z 4 określonych krajów europejskich. MySQL WHERE NOT IN
SELECT
zapytanie o to samo żądanie zwróci wszystkich klientów zamieszkałych w innych krajach, z wyjątkiem tych 4 zdefiniowanych wcześniej.
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
Wynik:
Nazwa kontaktu | Kraj | Miasto |
Patricio Simpson | Argentyna | Buenos Aires |
Sergio Gutiérrez | Argentyna | Buenos Aires |
Brian Citeaux | Kanada | Montréal |
Laura Smith | Kanada | Toronto |
Jan Green | Kanada | Toronto |
Martine Rance | Kanada | Vancouver |
Aleksander Feuer | Kanada | Århus |
Paolo Accorti | Włochy | Rzym |
Giovanni Rovelli | Włochy | Turyn |
Anna Moroni | Włochy | Pawia |
Uwaga :Zalecamy użycie [NOT] EXISTS
ponad [NOT] IN
ponieważ EXISTS
operator logiczny działa szybciej niż IN
, podczas porównywania zbiorów danych przy użyciu podzapytania. Co więcej, NOT EXISTS
uniknie nieoczekiwanych wyników, gdy dane źródłowe zawierają NULL
wartości.
GDZIE JEST NULL operator
Aby sprawdzić, czy wartość jest NULL
czy nie, użyj IS NULL
operator. Poniższa instrukcja używa WHERE
klauzula z IS NULL
operator, aby uzyskać wiersze bez wartości w books_read
kolumna:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NULL;
Wynik będzie wyglądał tak:
nazwisko | imię | reg_year | books_read |
Janett | Overacker | 2020 | NULL |
Lidia | Swenson | 2017 | NULL |
Albert | Crepeau | 2018 | NULL |
Anastazja | Johnson | 2021 | NULL |
Czy | Kowalski | 2017 | NULL |
GDZIE NIE JEST NULL, przykład
W przeciwieństwie do poprzedniego polecenia, WHERE IS NOT NULL
, przeciwnie, pokazuje tylko te wiersze, które zawierają jakąś wartość w danej kolumnie. W poniższym przykładzie wybierzemy tylko te wiersze, w których books_read kolumna nie jest pusta:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NOT NULL;
W danych wyjściowych zobaczysz tylko te wiersze, które zawierają wartość w books_read kolumna:
nazwisko | imię | reg_year | books_read |
Cory | Baster | 2021 | 8 |
Maddison | Winston | 2022 | 3 |
Isabella | Garsia | 2014 | 45 |
Jeremy | Koh | 2022 | 1 |
Aaron | Peterson | 2021 | 15 |
WHERE EXISTS
The EXISTS
operator checks if the subquery returns any value at all. Typically, this operator is used to indicate that at least one row in a table satisfies a certain condition.
In the example below,
SELECT last_name, first_name
FROM customers
WHERE EXISTS
(SELECT * FROM discounts WHERE customers.id = discounts.customer_id)
WHERE NOT EXISTS
However, the NOT EXISTS
operator is there for us in case we want to make sure whether there are rows in the table that do not satisfy a certain condition. For example, let’s find all products from the Products table for which there were no orders in the Orders table:
SELECT last_name, first_name
FROM customers
WHERE NOT EXISTS
(SELECT * FROM discounts WHERE customers.id = discounts.customer_id)
There is a separate article in our blog for those willing to learn more about the difference between EXISTS and NOT EXISTS in SQL.
Using MySQL WHERE clause with comparison operators
As we know, the WHERE
condition value can be any number, text, string, or subquery. Besides specifying the condition strictly, we can set a wider meaning for it by using the comparison operators. One example of a similar function is using the BETWEEN
operator. Now, let us review other options to set the condition range.
Operator | Description | Example |
= | Equal to the value. It is applicable for almost any data type. | SELECT * FROM VisitorsWHERE City =’London’; |
<> or != | Not equal to. It excludes the rows matching the value from the results. | SELECT * FROM CustomersWHERE Country=’Germany’ AND City !=’Berlin’; |
< | Less than. Mostly applies to numbers and date/time. | SELECT * FROM CustomersWHERE CustomerID <7; |
> | Greater than. Works in the same way, for numeric values and date/time. | SELECT * FROM CustomersWHERE CustomerID> 10; |
<= | Less than or equal to. The results set includes the rows with the same values or less than the condition value. | SELECT * FROM CustomersWHERE CustomerID <=5; |
>= | Greater than or equal to. The result set includes rows having the same values exceeding the condition values. | SELECT * FROM CustomersWHERE CustomerID>=55; |
In our example, we want to retrieve the list of customers with a customer ID lower than 90 who reside in the USA. The query is the following:
SELECT CustomerID, ContactName, City, Country
FROM Customers
WHERE CustomerID < 90 AND Country ='USA';
The output is:
CustomerID | ContactName | City | Country |
65 | Paula Wilson | Albuquerque | USA |
55 | Rene Phillips | Anchorage | USA |
78 | Liu Wong | Butte | USA |
36 | Yoshi Latimer | Elgin | USA |
32 | Howard Snyder | Eugene | USA |
82 | Helvetius Nagy | Kirkland | USA |
48 | Fran Wilson | Portland | USA |
77 | Liz Nixon | Portland | USA |
45 | Jaime Torres | San Francisco | USA |
89 | Karl Jablonski | Seattle | USA |
55 | Rene Phillips | Anchorage | USA |
Podsumowanie
As you see, MySQL WHERE
is among the most helpful clauses for all MySQL users. The variety of different logical operators lets you focus on the specific portion of data only, filter it correctly, and receive the results you need. Besides, modern professional tools for MySQL databases allow you to perform all tasks faster and easier. They take the burden of manual routines off your shoulders and make the performance much more stable and reliable. To sum up, working with a WHERE
statement is not too complicated. However, it requires being familiar with the corresponding commands. The command-line tools are more oriented toward experienced tech-savvy users. On the contrary, dbForge Studio for MySQL can boast an intuitive graphical interface. The intelligent code completion feature will be of use while working with the WHERE
clause, navigating the code, obtaining quick object information, and instantly performing syntax checks. Moreover, dbForge Query Builder will be of use to easily build WHERE
clauses visually.
Useful Links
- Joins in MySQL
- MySQL update query