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 OFFSETcu 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 LIMITde și OFFSET. Dacă scrieți ORDER BYdupă 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 folositASC

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 BYvă 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ă).