Operatory logiczne to narzędzia, które pomagają łączyć warunki w zapytaniach, żeby filtrować dane bardziej precyzyjnie. Pewnie już się z nimi spotkałeś w językach programowania. Jeśli porównać zapytania do programu filtrującego spam w skrzynce mailowej, to operatory logiczne można potraktować jak zasady, według których maile trafiają do folderu "Spam" albo zostają w "Odebrane".
SQL to narzędzie, które często wykorzystuje się do pobierania albo analizowania danych. Operatory logiczne (AND, OR, NOT) pozwalają łączyć kilka warunków w jednym zapytaniu, żeby odpowiadać na bardziej złożone pytania, na przykład:
- Którzy studenci mają więcej niż 18 lat i ocenę "A"?
- Jakie produkty należą do kategorii "Elektronika" albo "AGD"?
- Którzy klienci nie dokonali zakupów?
No to rozkminiamy trzy główne operatory logiczne w SQL:
AND: oba warunki muszą być prawdziwe.OR: wystarczy, że jeden z warunków będzie prawdziwy.NOT: odwraca (neguje) warunek.
Operator AND: oba warunki prawdziwe
Operator AND pozwala określić, że obie części warunku muszą być spełnione, żeby wiersz znalazł się w wyniku.
Składnia
SELECT kolumna1, kolumna2
FROM tabela
WHERE warunek AND warunek2;
Przykład 1: Filtrowanie studentów starszych niż 18 lat i z oceną "A"
Załóżmy, że mamy tabelę students:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 20 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 17 | A |
| 4 | Anna | 22 | A |
Zapytanie:
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A';
Wynik:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
Przykład 2: Filtrowanie pracowników z działu "HR" i z pensją powyżej 50000
SELECT name, department, salary
FROM employees
WHERE department = 'HR' AND salary > 50000;
Operator OR: wystarczy jeden warunek prawdziwy
Operator OR używamy, kiedy chcemy wybrać wiersze spełniające przynajmniej jeden z warunków.
Składnia
SELECT kolumna1, kolumna2
FROM tabela
WHERE warunek OR warunek2;
Przykład 1: Filtrowanie studentów z oceną "A" albo "B"
SELECT name, age, grade
FROM students
WHERE grade = 'A' OR grade = 'B';
Wynik:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Maria | 19 | B |
| Otto | 17 | A |
| Anna | 22 | A |
Przykład 2: Produkty z kategorii "Elektronika" albo z ceną poniżej 100
Tabela products:
| product_id | name | category | price |
|---|---|---|---|
| 1 | Telewizor | Elektronika | 300 |
| 2 | Żelazko | AGD | 50 |
| 3 | Smartfon | Elektronika | 700 |
| 4 | Czajnik | AGD | 80 |
SELECT name, category, price
FROM products
WHERE category = 'Elektronika' OR price < 100;
Wynik:
| name | category | price |
|---|---|---|
| Telewizor | Elektronika | 300 |
| Żelazko | AGD | 50 |
| Czajnik | AGD | 80 |
| Smartfon | Elektronika | 700 |
Operator NOT: odwrócenie warunku
Jeśli AND i OR określają warunki, które muszą być prawdziwe, to NOT robi odwrotnie: wybiera wiersze, dla których dany warunek jest fałszywy.
Składnia
SELECT kolumna1, kolumna2
FROM tabela
WHERE NOT warunek;
Przykład 1: Filtrowanie studentów, którzy nie mają oceny "A"
SELECT name, age, grade
FROM students
WHERE NOT grade = 'A';
Wynik:
| name | age | grade |
|---|---|---|
| Maria | 19 | B |
Przykład 2: Wyszukiwanie produktów, które nie należą do kategorii "Elektronika"
SELECT name, category, price
FROM products
WHERE NOT category = 'Elektronika';
Kombinacja operatorów logicznych
Operatory logiczne można łączyć, żeby tworzyć jeszcze bardziej złożone warunki. Na przykład, jeśli chcesz wybrać studentów starszych niż 18 lat i z oceną "A" albo "B", możesz połączyć AND i OR.
Składnia z kombinacją
SELECT kolumna1, kolumna2
FROM tabela
WHERE (warunek1 AND warunek2) OR warunek3;
Przykład: Studenci starsi niż 18 lat z oceną "A" albo studenci z oceną "B"
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR grade = 'B';
Wynik:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
| Maria | 19 | B |
Priorytet wykonania operatorów
Ważne, żeby pamiętać, że SQL wykonuje operatory logiczne w takiej kolejności:
NOTANDOR
Możesz używać nawiasów, żeby zmienić kolejność wykonania. Bez nawiasów wynik może być zaskakujący!
Przykład: Porównanie z nawiasami i bez
Co się stanie w tym zapytaniu?
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';
To zapytanie wybiera studentów:
- Którzy mają więcej niż 18 lat i ocenę "A".
- Którzy mają ocenę "B".
Priorytet wykonania operatorów daje taki sam wynik, jak z nawiasami:
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR (grade = 'B');
Ale jeśli dodamy nawiasy:
SELECT name, age, grade
FROM students
WHERE age > 18 AND (grade = 'A' OR grade = 'B');
Teraz zostaną wybrani studenci starsi niż 18 lat z oceną "A" albo "B". Nawiasy naprawdę zmieniają wszystko!
Typowe błędy przy używaniu operatorów logicznych
- Zapomniane nawiasy. To może prowadzić do nieoczekiwanych wyników, szczególnie przy łączeniu
ANDiOR. - Użycie
NOTbez jasnego zrozumienia, które wiersze są wykluczane. - Złe użycie operatorów logicznych. Na przykład
ANDzamiastORalbo odwrotnie. - Zbyt skomplikowane warunki. Bardzo długie warunki z wieloma
AND,OR,NOTbez komentarzy mogą być ciężkie do ogarnięcia.
Te operatory to podstawa każdego bardziej złożonego zapytania. Teraz jesteś gotowy pisać zapytania, które nie tylko działają, ale też znajdują dokładnie to, czego szukasz!
GO TO FULL VERSION