4.1 LIMIT
Jeśli spodziewasz się, że zapytanie SQL zwróci zbyt dużo danych, możesz z góry ograniczyć ich maksymalną liczbę. W końcu tabele mogą zawierać tysiące, a nawet miliony wierszy.
SQL bardzo ułatwia ograniczenie liczby wierszy w wyniku zapytania przy użyciu metody LIMIT
. To słowo kluczowe jest używane na samym końcu zapytania SQL i wygląda tak:
LIMIT quantity
Napiszmy zapytanie do tabeli produktów, która zawiera listę produktów naszego sklepu. Ale ponieważ mamy bardzo dobrze prosperujący sklep i sprzedajemy wiele produktów, chcemy uzyskać tylko pierwsze 10 wierszy odpowiedzi. Oto jak wyglądałoby to żądanie:
SELECT * FROM product
LIMIT 10
Otrzymujemy następujący wynik zapytania:
ID | nazwa | marka | cena | liczyć |
---|---|---|---|---|
1 | Tabela | IKEA | 20.00 | 15 |
2 | Krzesło | IKEA | 5.00 | 45 |
3 | Sofa | IKEA | 80.00 | 10 |
4 | Łóżko | IKEA | 75.00 | 10 |
5 | Gabinet | Boscha | 125.00 | 15 |
6 | Półka | Półka | 25.00 | 114 |
7 | telewizja | LG | 350,00 | 4 |
8 | Lampa | LG | 15.00 | 100 |
9 | Kredens | IKEA | 99,00 | 10 |
10 | Płyta | Boscha | 199,00 | 10 |
Teraz poprosimy tylko o pierwsze 5 rzędów. Oto jak wyglądałoby to żądanie:
SELECT * FROM product
LIMIT 5
Otrzymujemy następujący wynik zapytania:
ID | nazwa | marka | cena | liczyć |
---|---|---|---|---|
1 | Tabela | IKEA | 20.00 | 15 |
2 | Krzesło | IKEA | 5.00 | 45 |
3 | Sofa | IKEA | 80.00 | 10 |
4 | Łóżko | IKEA | 75.00 | 10 |
5 | Gabinet | Boscha | 125.00 | 15 |
4.2 PRZESUNIĘCIE
Ostatnim razem nauczyliśmy się ograniczać liczbę linii w odpowiedzi serwera. I teraz, zamiast tysięcy wierszy z tabeli produktów, możemy pobrać pierwsze 10 wierszy i wyświetlić je użytkownikowi. Jest doskonale. Ale jak wyświetlić drugie 10 wierszy? A trzeci?
Jeśli napiszemy LIMIT 20
, lub LIMIT 30
, czy serwer nie zwróci odpowiednio 20 i 30 wierszy?
W tym przypadku SQL ma specjalne słowo kluczowe, OFFSET
za pomocą którego można poprosić serwer o pominięcie N wierszy w odpowiedzi. To słowo kluczowe jest używane na samym końcu zapytania SQL (po LIMIT
) i wygląda następująco:
OFFSET quantity
Napiszmy zapytanie w tabeli produktu i spróbujmy uzyskać rekordy od 11 do 15. Innymi słowy, prosimy serwer o zwrócenie nam 5 wierszy, ale najpierw pomińmy pierwsze 10 wierszy odpowiedzi. Oto jak wyglądałoby to żądanie:
SELECT * FROM product
LIMIT 5
OFFSET 10
Otrzymujemy następujący wynik zapytania:
ID | nazwa | marka | cena | liczyć |
---|---|---|---|---|
jedenaście | Fotel | Boscha | 44.00 | 8 |
12 | doniczka | Inteligentny kwiat | 99,00 | 9 |
13 | Podstawka | IKEA | 100,00 | 10 |
Serwer zwrócił tylko 3 wiersze, co oznacza, że w naszej tabeli było łącznie 13 wierszy. Serwer pominął pierwsze 10 i zwrócił następne 5.
4.3 WYBIERZ RÓŻNE
Kolejnym przydatnym słowem kluczowym jest DISTINCT
. Jest używany, gdy w tabeli znajdują się zduplikowane rekordy i chcemy usunąć duplikaty.
Skąd biorą się duplikaty w naszej tabeli? W tabeli może nie być duplikatów, ale w wyniku zapytania jest to łatwe. Napiszmy zapytanie, które zwróci marki wszystkich sprzedawanych przez nas produktów. Oto jak wyglądałoby to żądanie:
SELECT brand FROM product
Otrzymujemy następujący wynik zapytania:
marka |
---|
IKEA |
IKEA |
IKEA |
IKEA |
Boscha |
Boscha |
LG |
LG |
IKEA |
Boscha |
Boscha |
Inteligentny kwiat |
IKEA |
Łatwo zauważyć, że w tej tabeli znajdują się zduplikowane wiersze. Ma to na celu upewnienie się, że nie ma duplikatów i musisz użyć słowa kluczowego DISTINCT
. Oto jak będzie wyglądać poprawiona prośba:
SELECT DISTINCT brand
FROM product
Otrzymujemy następujący wynik zapytania:
marka |
---|
IKEA |
Boscha |
LG |
Inteligentny kwiat |
O wiele lepiej. Czyż nie? ;)
4.4 ZAMÓW WEDŁUG
I w końcu zabraliśmy się za sortowanie . Aby posortować wyniki zapytania, musisz użyć słowa kluczowego ORDER BY
. Technicznie rzecz biorąc, są to dwa słowa, ale istota nie jest ważna. Dwa słowa, jeden operator.
Musi być napisane po słowie kluczowym WHERE
, ale przed LIMIT
i OFFSET
. Jeśli napiszesz ORDER BY
po LIMIT
, serwer SQL po prostu zwróci ci błąd.
Ogólnie ten operator wygląda tak:
ORDER BY column order
Gdzie kolumna to nazwa kolumny w tabeli / wyniku sortowania. A kolejność to kolejność sortowania.
Kolejność sortowania może być trzech rodzajów:
ASC
(od Rosnąco) - rosnąco;DESC
(od malejąco) - malejąco;- Nie określono - będzie używany
ASC
Napiszmy zapytanie, które zwróci listę produktów posortowanych rosnąco według ceny. Oto jak wyglądałoby to żądanie:
SELECT * FROM product
ORDER BY price ASC
LIMIT 10
Otrzymujemy następujący wynik zapytania:
ID | nazwa | marka | cena | liczyć |
---|---|---|---|---|
2 | Krzesło | IKEA | 5.00 | 45 |
8 | Lampa | LG | 15.00 | 100 |
1 | Tabela | IKEA | 20.00 | 15 |
6 | Półka | Boscha | 25.00 | 114 |
jedenaście | Fotel | Boscha | 44.00 | 8 |
4 | Łóżko | IKEA | 75.00 | 10 |
3 | Sofa | IKEA | 80.00 | 10 |
12 | doniczka | Inteligentny kwiat | 99,00 | 9 |
9 | Kredens | IKEA | 99,00 | 10 |
13 | Podstawka | IKEA | 100,00 | 10 |
Ten sam wynik otrzymamy, jeśli nie określimy kolejności sortowania - pominiemy słowo ASC
.
4.5 ORDER BY w wielu kolumnach
Operator ORDER BY
umożliwia sortowanie wyniku po kilku kolumnach. Może to być bardzo przydatne, gdy pierwsza kolumna zawiera wiele zduplikowanych elementów. Ogólna postać tego operatora jest następująca:
ORDER BY column 1 order 1, column 2 order 2, column 3 order 3
Innymi słowy, jeśli po posortowaniu według pierwszej kolumny masz w pobliżu kilka identycznych wartości, to są one sortowane według drugiej kolumny i tak dalej.
Napiszmy zapytanie, które posortuje nasze produkty według marki, a dla produktów tej samej marki - w porządku malejącym według ich liczby. Oto jak wyglądałoby to żądanie:
SELECT * FROM product
ORDER BY brand ASC, count
DESC
Otrzymujemy następujący wynik zapytania:
ID | nazwa | marka | cena | liczyć |
---|---|---|---|---|
6 | Półka | Boscha | 25.00 | 114 |
5 | Gabinet | Boscha | 125.00 | 15 |
10 | Płyta | Boscha | 199,00 | 10 |
jedenaście | Fotel | Boscha | 44.00 | 8 |
2 | Krzesło | IKEA | 5.00 | 45 |
1 | Tabela | IKEA | 20.00 | 15 |
9 | Kredens | IKEA | 99,00 | 10 |
13 | Podstawka | IKEA | 100,00 | 10 |
4 | Łóżko | IKEA | 75.00 | 10 |
3 | Sofa | IKEA | 80.00 | 10 |
8 | Lampa | LG | 15.00 | 100 |
7 | telewizja | LG | 350,00 | 4 |
12 | doniczka | Inteligentny kwiat | 99,00 | 9 |
Przyjrzyj się uważnie tabeli - jej wiersze są posortowane według nazwy marki (kolejność alfabetyczna), a wiersze z tą samą nazwą marki są posortowane według numeru produktu w kolejności malejącej (ostatnia kolumna).
GO TO FULL VERSION