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, OFFSETza 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 LIMITi OFFSET. Jeśli napiszesz ORDER BYpo 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 BYumoż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