3.1 Porównywanie wartości: <, >, =, <>
Jednym z najczęściej używanych słów kluczowych podczas pisania zapytań SQL jest WHERE
. To za jego pomocą mówimy MySQL, które wiersze tabeli chcemy przefiltrować (wybrać).
Po słowie kluczowym WHERE
możesz napisać bardzo złożone i trudne warunki. Jakie więc operacje może zawierać ten warunek?
Operator | Opis | Przykład |
---|---|---|
< | Mniej | pensja < 40000 |
> | Więcej | wynagrodzenie > 100 000 |
<= | Mniej lub równo | wiek <= 25 lat |
>= | Więcej lub równo | wiek >= 18 lat |
= | Równa się | zawód = „Programista” |
<>, != | Nie równe | Rok(data_dołączenia) != 2015 |
W przeciwieństwie do języka Java, dla ścisłej równości, używany jest tutaj jeden znak równy, a nie dwa .
Jeśli chcesz sprawdzić, czy wartości nie są równe, możesz to zrobić na dwa sposoby: <>
albo !=
Pierwsze podejście jest stosowane w językach takich jak Pascal, drugie jest typowe dla języków takich jak C++ i Jawa.
Do przypisania w SQL używa się go :=
jak w Pascalu, ale samo przypisanie jest używane bardzo rzadko.
Napiszmy zapytanie, w którym wyświetlimy wszystkich pracowników, którzy nie byli zatrudnieni w 2015 roku.
SELECT * FROM employee WHERE YEAR(join_date) != 2015
Otrzymujemy następujący wynik zapytania:
ID | nazwa | zawód | wynagrodzenie | wiek | data_dołączenia |
---|---|---|---|---|---|
1 | Iwanow Iwan | Programista | 100 000 | 25 | 2012-06-30 |
2 | Pietrow Pietr | Programista | 80 000 | 23 | 2013-08-12 |
3 | Iwanow Siergiej | Próbnik | 40 000 | trzydzieści | 2014-01-01 |
6 | Vaska | kot | 1000 | 3 | 2018-01-01 |
3.2 Operacje logiczne I, LUB, NIE
Możesz także użyć WHERE
operacji logicznych AND
i OR
. NOT
I są one napisane dokładnie tak, jak je tutaj opisałem. Brak &&
lub ||
_!
Napiszmy zapytanie SQL, w którym wybieramy pracowników, którzy mają ponad 20 lat i otrzymują wynagrodzenie poniżej 50 tys.
SELECT * FROM employee WHERE age > 20 AND salary < 50000
Otrzymujemy następujący wynik zapytania:
ID | nazwa | zawód | wynagrodzenie | wiek | data_dołączenia |
---|---|---|---|---|---|
3 | Iwanow Siergiej | Próbnik | 40 000 | trzydzieści | 2014-01-01 |
5 | Kirienko Anastazja | Kierownik biura | 40 000 | 25 | 2015-10-10 |
Zbyt łatwe. Napiszmy zapytanie, w którym wybieramy pracowników, którzy otrzymują więcej niż 100 000 i nie pracują jako dyrektor:
SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Director'
Tutaj specjalnie !=
użyliśmy operatora zamiast symbolu NOT
.
Otrzymujemy następujący wynik zapytania:
ID | nazwa | zawód | wynagrodzenie | wiek | data_dołączenia |
---|---|---|---|---|---|
1 | Iwanow Iwan | Programista | 100 000 | 25 | 2012-06-30 |
3.3 MIĘDZY: zakres wartości
Również w SQL istnieje specjalny operator, BETWEEN
za pomocą którego można sprawdzić, czy zmienna leży między dwiema wartościami. Ten operator jest używany wewnątrz wyrażeń boolowskich. Ogólna postać takiego operatora to:
variable BETWEEN bottom line AND top_bound
W tym przypadku, w przeciwieństwie do języka Java, zarówno dolna, jak i górna granica mieszczą się w dozwolonym przedziale.
Napiszmy przykład, w którym wybieramy wszystkich pracowników z pensją od 40K do 100K. Żądanie będzie wyglądać następująco:
SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000
Otrzymujemy następujący wynik zapytania:
ID | nazwa | zawód | wynagrodzenie | wiek | data_dołączenia |
---|---|---|---|---|---|
1 | Iwanow Iwan | Programista | 100 000 | 25 | 2012-06-30 |
2 | Pietrow Pietr | Programista | 80 000 | 23 | 2013-08-12 |
3 | Iwanow Siergiej | Próbnik | 40 000 | trzydzieści | 2014-01-01 |
5 | Kirienko Anastazja | Kierownik biura | 40 000 | 25 | 2015-10-10 |
Operator BETWEEN
obsługuje nie tylko typy liczbowe, ale także daty , a nawet typy łańcuchowe . W przypadku pracy ze ciągami znaków stosowany jest porządek leksykograficzny: aaba występuje przed aabb
3.4 IN: lista wartości
Ponadto SQL ma specjalny operator, IN
za pomocą którego można sprawdzić, czy zmienna znajduje się na podanej liście. Ten operator jest używany wewnątrz wyrażeń boolowskich. Ogólna postać takiego operatora to:
variable IN (value 1 , value 2 , ... value N)
Napiszmy zapytanie, w którym wybieramy pracowników, którzy mają 20, 25 lub 30 lat. Żądanie będzie wyglądać następująco:
SELECT * FROM employee WHERE age IN (20, 25, 30)
Otrzymujemy następujący wynik zapytania:
ID | nazwa | zawód | wynagrodzenie | wiek | data_dołączenia |
---|---|---|---|---|---|
1 | Iwanow Iwan | Programista | 100 000 | 25 | 2012-06-30 |
3 | Iwanow Siergiej | Próbnik | 40 000 | trzydzieści | 2014-01-01 |
5 | Kirienko Anastazja | Kierownik biura | 40 000 | 25 | 2015-10-10 |
A teraz napiszmy zapytanie, w którym wręcz przeciwnie, wybieramy pracowników w wieku not
20, 25 lub 30 lat. Zapytanie będzie wyglądać następująco:
SELECT * FROM employee WHERE age NOT IN (20, 25, 30)
Otrzymujemy następujący wynik zapytania:
ID | nazwa | zawód | wynagrodzenie | wiek | data_dołączenia |
---|---|---|---|---|---|
2 | Pietrow Pietr | Programista | 80 000 | 23 | 2013-08-12 |
4 | Rabinowicz Mojsza | Dyrektor | 200 000 | 35 | 2015-05-12 |
6 | Vaska | kot | 1000 | 3 | 2018-01-01 |
Wszystko działało zgodnie z oczekiwaniami. Uroda.
3,5 LIKE: wzór sznurka
I na koniec jeszcze jeden ważny i bardzo często używany operator - LIKE
. Jest używany podczas porównywania ciągów znaków. Można go użyć do ustawienia wzoru sznurka. Ten operator jest używany wewnątrz wyrażeń boolowskich. Ogólna postać takiego operatora to:
variable LIKE 'sample'
We wzorcu można stosować znaki specjalne: %
i _
.
- Podkreślenie oznacza dowolny znak, zawsze 1 szt.
- Procent oznacza dowolny znak i dowolną liczbę razy (w tym 0 razy).
Napiszmy zapytanie, które wybierze wszystkie osoby, których nazwisko zaczyna się na literę „I”. Żądanie będzie wyglądać następująco:
SELECT * FROM employee WHERE name LIKE 'I%'
Otrzymujemy następujący wynik zapytania:
ID | nazwa | zawód | wynagrodzenie | wiek | data_dołączenia |
---|---|---|---|---|---|
1 | Iwanow Iwan | Programista | 100 000 | 25 | 2012-06-30 |
3 | Iwanow Siergiej | Próbnik | 40 000 | trzydzieści | 2014-01-01 |
Teraz skomplikujmy zadanie - nazwa powinna zawierać "o", a nazwa powinna kończyć się na "a". Żądanie będzie wyglądać następująco:
SELECT * FROM employee WHERE name LIKE '%o%a'
Otrzymujemy następujący wynik zapytania:
ID | nazwa | zawód | wynagrodzenie | wiek | data_dołączenia |
---|---|---|---|---|---|
4 | Rabinowicz Mojsza | Dyrektor | 200 000 | 35 | 2015-05-12 |
Dobra, zróbmy to trochę trudniej. Odfiltrujmy wszystkich pracowników, których wiek zaczyna się od cyfry „3”. Żądanie będzie wyglądać następująco:
SELECT * FROM employee WHERE age LIKE '3%'
Otrzymujemy następujący wynik zapytania:
ID | nazwa | zawód | wynagrodzenie | wiek | data_dołączenia |
---|---|---|---|---|---|
3 | Iwanow Siergiej | Próbnik | 40 000 | trzydzieści | 2014-01-01 |
4 | Rabinowicz Mojsza | Dyrektor | 200 000 | 35 | 2015-05-12 |
6 | Vaska | kot | 1000 | 3 | 2018-01-01 |
Nawiasem mówiąc, nasza kolumna wiekuint
jest typu , więc LIKE
działa nie tylko z łańcuchami. Co nie może się nie cieszyć.