4.1 LIMITĂ
Dacă vă așteptați ca interogarea dvs. SQL să returneze prea multe date, puteți limita numărul maxim în avans. La urma urmei, tabelele pot conține mii sau chiar milioane de rânduri.
SQL simplifică limitarea numărului de rânduri din rezultatul unei interogări folosind LIMIT
. Acest cuvânt cheie este folosit la sfârșitul interogării SQL și arată astfel:
LIMIT quantity
Să scriem o interogare pe tabelul cu produse, care conține o listă cu produsele magazinului nostru. Dar din moment ce avem un magazin de mare succes și vindem o mulțime de produse, vrem să obținem doar primele 10 rânduri de răspuns. Iată cum ar arăta această solicitare:
SELECT * FROM product
LIMIT 10
Și obținem următorul rezultat al interogării:
id | Nume | marca | Preț | numara |
---|---|---|---|---|
1 | Masa | IKEA | 20.00 | 15 |
2 | Scaun | IKEA | 5.00 | 45 |
3 | Canapea | IKEA | 80.00 | 10 |
4 | Pat | IKEA | 75.00 | 10 |
5 | Dulap | Bosch | 125.00 | 15 |
6 | Raft | Raft | 25.00 | 114 |
7 | televizor | LG | 350,00 | 4 |
8 | Lampă | LG | 15.00 | 100 |
9 | Dulap | IKEA | 99.00 | 10 |
10 | Farfurie | Bosch | 199.00 | 10 |
Acum vom solicita doar primele 5 rânduri. Iată cum ar arăta această solicitare:
SELECT * FROM product
LIMIT 5
Obținem următorul rezultat al interogării:
id | Nume | marca | Preț | numara |
---|---|---|---|---|
1 | Masa | IKEA | 20.00 | 15 |
2 | Scaun | IKEA | 5.00 | 45 |
3 | Canapea | IKEA | 80.00 | 10 |
4 | Pat | IKEA | 75.00 | 10 |
5 | Dulap | Bosch | 125.00 | 15 |
4.2 OFFSET
Ultima dată am învățat cum să limităm numărul de linii în răspunsul serverului. Și acum, în loc de mii de rânduri din tabelul de produse, putem obține primele 10 rânduri și le putem afișa utilizatorului. Este perfect. Dar cum afișăm al doilea 10 rânduri? Și al treilea?
Dacă scriem LIMIT 20
, sau LIMIT 30
, serverul nu va returna 20 și, respectiv, 30 de rânduri?
În acest caz, SQL are un cuvânt cheie special OFFSET
cu care puteți cere serverului să sară N rânduri în răspunsul său. Acest cuvânt cheie este folosit chiar la sfârșitul interogării SQL (după LIMIT
) și arată astfel:
OFFSET quantity
Să scriem o interogare pe tabelul de produse și să încercăm să obținem înregistrările de la 11 la 15. Cu alte cuvinte, cerem serverului să ne returneze 5 rânduri, dar sări peste primele 10 rânduri ale răspunsului. Iată cum ar arăta această solicitare:
SELECT * FROM product
LIMIT 5
OFFSET 10
Obținem următorul rezultat al interogării:
id | Nume | marca | Preț | numara |
---|---|---|---|---|
unsprezece | Fotoliu | Bosch | 44.00 | 8 |
12 | ghiveci de flori | Smartflower | 99.00 | 9 |
13 | Stand | IKEA | 100.00 | 10 |
Serverul a returnat doar 3 rânduri, ceea ce înseamnă că au fost 13 rânduri în total în tabelul nostru. Serverul a sărit peste primele 10 și a returnat următoarele 5.
4.3 SELECTARE DISTINCT
Un alt cuvânt cheie util este DISTINCT
. Este folosit atunci când există înregistrări duplicate în tabel și dorim să eliminăm duplicatele.
De unde provin duplicatele din tabelul nostru? Este posibil să nu existe duplicate în tabel, dar, ca urmare a interogării, este ușor. Să scriem o interogare care va returna mărcile tuturor produselor pe care le vindem. Iată cum ar arăta această solicitare:
SELECT brand FROM product
Obținem următorul rezultat al interogării:
marca |
---|
IKEA |
IKEA |
IKEA |
IKEA |
Bosch |
Bosch |
LG |
LG |
IKEA |
Bosch |
Bosch |
Smartflower |
IKEA |
Este ușor de observat că există rânduri duplicat în acest tabel. Este pentru a vă asigura că nu există duplicate și trebuie să utilizați cuvântul cheie DISTINCT
. Iată cum va arăta cererea corectată:
SELECT DISTINCT brand
FROM product
Obținem următorul rezultat al interogării:
marca |
---|
IKEA |
Bosch |
LG |
Smartflower |
Mult mai bine. Nu-i așa? ;)
4.4 COMANDA PENTRU
Și în sfârșit am ajuns la sortare . Pentru a sorta rezultatele unei interogări, trebuie să utilizați cuvântul cheie ORDER BY
. Din punct de vedere tehnic, acestea sunt două cuvinte, dar esența nu este importantă. Două cuvinte, un operator.
Trebuie scris după cuvântul cheie WHERE
, dar înainte LIMIT
de și OFFSET
. Dacă scrieți ORDER BY
după LIMIT
, atunci serverul SQL vă va returna pur și simplu o eroare.
În general, acest operator arată astfel:
ORDER BY column order
Unde coloană este numele coloanei din rezultatul tabelului/sortării. Și ordinea este ordinea de sortare.
Ordinea de sortare poate fi de trei tipuri:
ASC
(din Ascendent) - ascendent;DESC
(din Descendent) - descendent;- Nespecificat - va fi folosit
ASC
Să scriem o interogare care va returna o listă de produse sortate după preț în ordine crescătoare. Iată cum ar arăta această solicitare:
SELECT * FROM product
ORDER BY price ASC
LIMIT 10
Obținem următorul rezultat al interogării:
id | Nume | marca | Preț | numara |
---|---|---|---|---|
2 | Scaun | IKEA | 5.00 | 45 |
8 | Lampă | LG | 15.00 | 100 |
1 | Masa | IKEA | 20.00 | 15 |
6 | Raft | Bosch | 25.00 | 114 |
unsprezece | Fotoliu | Bosch | 44.00 | 8 |
4 | Pat | IKEA | 75.00 | 10 |
3 | Canapea | IKEA | 80.00 | 10 |
12 | ghiveci de flori | Smartflower | 99.00 | 9 |
9 | Dulap | IKEA | 99.00 | 10 |
13 | Stand | IKEA | 100.00 | 10 |
Vom obține același rezultat dacă nu specificăm ordinea de sortare - vom sări peste cuvânt ASC
.
4.5 ORDER BY pe mai multe coloane
Operatorul ORDER BY
vă permite să sortați rezultatul după mai multe coloane. Acest lucru poate fi foarte util atunci când prima coloană are multe elemente duplicate. Forma generală a acestui operator este următoarea:
ORDER BY column 1 order 1, column 2 order 2, column 3 order 3
Cu alte cuvinte, dacă după sortarea după prima coloană aveți mai multe valori identice în apropiere, atunci acestea sunt sortate după a doua coloană și așa mai departe.
Să scriem o interogare care va sorta produsele noastre după marcă și pentru produsele cu aceeași marcă - în ordinea descrescătoare a numărului lor. Iată cum ar arăta această solicitare:
SELECT * FROM product
ORDER BY brand ASC, count
DESC
Obținem următorul rezultat al interogării:
id | Nume | marca | Preț | numara |
---|---|---|---|---|
6 | Raft | Bosch | 25.00 | 114 |
5 | Dulap | Bosch | 125.00 | 15 |
10 | Farfurie | Bosch | 199.00 | 10 |
unsprezece | Fotoliu | Bosch | 44.00 | 8 |
2 | Scaun | IKEA | 5.00 | 45 |
1 | Masa | IKEA | 20.00 | 15 |
9 | Dulap | IKEA | 99.00 | 10 |
13 | Stand | IKEA | 100.00 | 10 |
4 | Pat | IKEA | 75.00 | 10 |
3 | Canapea | IKEA | 80.00 | 10 |
8 | Lampă | LG | 15.00 | 100 |
7 | televizor | LG | 350,00 | 4 |
12 | ghiveci de flori | Smartflower | 99.00 | 9 |
Priviți cu atenție tabelul - rândurile sale sunt sortate după numele mărcii (ordine alfabetică), iar rândurile cu același nume de marcă sunt sortate după numărul de produs în ordine descrescătoare (ultima coloană).