CodeGym /Kursy /SQL SELF /Budowanie prostych zapytań z SELECT, WHERE i ORDER BY

Budowanie prostych zapytań z SELECT, WHERE i ORDER BY

SQL SELF
Poziom 3 , Lekcja 2
Dostępny

No to czas połączyć wszystko w całość i nauczyć się budować proste, ale przydatne zapytania z kombinacją SELECT, WHERE i ORDER BY. Ta umiejętność przyda Ci się do wielu rzeczy, od pobierania listy użytkowników po robienie małych raportów.

Zanim zaczniemy, przypomnijmy sobie jak wygląda struktura prostego zapytania SQL:

SELECT kolumna1, kolumna2, kolumna3
FROM tabela
WHERE warunek
ORDER BY kolumna ASC
LIMIT liczba_wierszy
OFFSET liczba_wierszy;

Gdyby SQL był dziełem literackim, to SELECT — to tytuł rozdziału, FROM — jego treść, a WHERE — wyjaśnienie fabuły. No a ORDER BY dodaje porządek, żeby czytało się ciekawiej!

Kolejność operatorów jest ściśle ustalona. Niektóre z nich możesz pominąć (nie podawać), ale nie możesz zmieniać ich kolejności.

Przykład 1: Wybór imion studentów z najlepszymi ocenami

Wyobraź sobie, że mamy tabelę students z taką strukturą i danymi:

id name age grade
1 Otto 21 A
2 Maria 22 B
3 Alex 20 A
4 Nat 23 C
5 Dan 25 B

Musisz dostać listę wszystkich studentów z najlepszą oceną (czyli grade = 'A'), posortowaną po imieniu. Tak to robimy:

SELECT name
FROM students
WHERE grade = 'A'
ORDER BY name ASC;

Wynik:

name
Alex
Otto

Wyjaśnienie:

  1. SELECT name — wybieramy tylko imię. Nie ma sensu pobierać danych, których nie potrzebujemy.
  2. WHERE grade = 'A' — filtrujemy tylko tych, którzy mają najlepszą ocenę.
  3. ORDER BY name ASC — sortujemy imiona studentów alfabetycznie.

Przykład 2: Szukanie produktów po cenie

Teraz wyobraź sobie, że mamy tabelę products z informacjami o produktach:

id product_name category price
1 Smartfon Electronics 30000
2 Telewizor Electronics 45000
3 Lodówka Appliances 50000
4 Odkurzacz Appliances 15000
5 Żarówka Lighting 500

Nasze zadanie — dostać listę produktów z kategorii "Electronics", posortowaną malejąco po cenie. Zapytanie wygląda tak:

SELECT product_name, price
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;

Wynik:

product_name price
Telewizor 45000
Smartfon 30000

Wyjaśnienie:

  1. SELECT product_name, price — wybieramy nazwę produktu i jego cenę.
  2. WHERE category = 'Electronics' — filtrujemy tylko produkty z kategorii "Electronics".
  3. ORDER BY price DESC — sortujemy wyniki malejąco po cenie (najdroższy produkt na górze).

Przykład 3: Złożone filtry z logiką

Używamy tej samej tabeli students. Załóżmy, że musimy znaleźć wszystkich studentów starszych niż 21 lat, którzy mają ocenę B lub C, i posortować ich po wieku. Tutaj łączymy kilka warunków:

SELECT name, age, grade
FROM students
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
ORDER BY age ASC;

Wynik:

name age grade
Maria 22 B
Nat 23 C
Dan 25 B

Wyjaśnienie:

  1. WHERE age > 21 — wybieramy tylko studentów starszych niż 21 lat.
  2. AND (grade = 'B' OR grade = 'C') — filtrujemy tych, którzy mają ocenę B lub C. Nawiasy służą do grupowania warunków.
  3. ORDER BY age ASC — sortujemy wynik po wieku, od najmłodszego.

Przykład 4: Łączenie sortowania i filtrowania

Wracamy do tabeli products. Chcemy znaleźć produkty tańsze niż 50 000, posortować je po kategorii, a w każdej kategorii — po cenie (od najniższej do najwyższej).

SELECT product_name, category, price
FROM products
WHERE price < 50000
ORDER BY category ASC, price ASC;

Wynik:

product_name category price
Odkurzacz Appliances 15000
Smartfon Electronics 30000
Telewizor Electronics 45000
Żarówka Lighting 500

Wyjaśnienie:

  1. WHERE price < 50000 — najpierw filtrujemy produkty, zostawiając tylko te tańsze niż 50 000.
  2. ORDER BY category ASC, price ASC — sortujemy po kategoriach (alfabetycznie), a w każdej kategorii po cenie rosnąco.

Przykład 5: Częsty błąd — pominięcie warunków

Zobaczmy teraz, co może pójść nie tak. Co jeśli zapomnimy o grupowaniu warunków, jak przy operatorach logicznych?

Złe zapytanie:

SELECT name, age, grade
FROM students
WHERE age > 21 AND grade = 'B' OR grade = 'C'
ORDER BY age ASC;

Tutaj OR grade = 'C' wykona się bez uwzględnienia AND age > 21, i zapytanie zwróci nie ten wynik. Dostaniemy wszystkich, którzy mają ocenę C, nawet jeśli są młodsi niż 21 lat.

Dlatego zawsze używaj nawiasów dla jasności:

WHERE age > 21 AND (grade = 'B' OR grade = 'C')
2
Zadanie
SQL SELF, poziom 3, lekcja 2
Niedostępne
Filtr i sortowanie produktów
Filtr i sortowanie produktów
2
Zadanie
SQL SELF, poziom 3, lekcja 2
Niedostępne
Zaawansowany filtr studentów
Zaawansowany filtr studentów
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION