4.1 KORLÁTOZÁS

Ha arra számít, hogy az SQL-lekérdezés túl sok adatot ad vissza, előre korlátozhatja a maximális számot. Végül is a táblázatok több ezer vagy akár millió sort is tartalmazhatnak.

Az SQL nagyon egyszerűvé teszi a sorok számának korlátozását egy lekérdezés eredményében a LIMIT. Ez a kulcsszó az SQL lekérdezés legvégén használatos, és így néz ki:

LIMIT quantity

Írjunk lekérdezést a terméktáblázathoz, amely áruházunk termékeinek listáját tartalmazza. De mivel nagyon sikeres üzletünk van, és rengeteg terméket árulunk, csak az első 10 sort szeretnénk megkapni a választ. Így nézne ki a kérés:

SELECT * FROM product
LIMIT 10

És a következő lekérdezési eredményt kapjuk:

id név márka ár számol
1 asztal IKEA 20.00 15
2 Szék IKEA 5.00 45
3 Kanapé IKEA 80.00 10
4 Ágy IKEA 75.00 10
5 Fülke Bosch 125.00 15
6 Polc Polc 25.00 114
7 tévé LG 350,00 4
8 Lámpa LG 15.00 100
9 Öltözködőasztal IKEA 99.00 10
10 Lemez Bosch 199,00 10

Most csak az első 5 sort fogjuk kérni. Így nézne ki a kérés:

SELECT * FROM product
LIMIT 5

A következő lekérdezési eredményt kapjuk:

id név márka ár számol
1 asztal IKEA 20.00 15
2 Szék IKEA 5.00 45
3 Kanapé IKEA 80.00 10
4 Ágy IKEA 75.00 10
5 Fülke Bosch 125.00 15

4.2 OFFSET

Legutóbb megtanultuk, hogyan lehet korlátozni a sorok számát a szerver válaszában. És most a terméktáblázat több ezer sora helyett megkaphatjuk az első 10 sort, és megjeleníthetjük a felhasználó számára. Ez tökéletesen. De hogyan jelenítsük meg a második 10 sort? És a harmadik?

LIMIT 20Ha , vagy -t írunk LIMIT 30, akkor a szerver nem ad vissza 20 illetve 30 sort?

Erre az esetre az SQL-nek van egy speciális kulcsszava, OFFSETamellyel megkérheti a szervert, hogy ugorjon ki N sort a válaszában. Ez a kulcsszó az SQL-lekérdezés legvégén (a után LIMIT) használatos, és így néz ki:

OFFSET quantity

Írjunk egy lekérdezést a terméktáblázatba , és próbáljunk meg 11-től 15-ig terjedő rekordokat lekérni. Más szóval, megkérjük a szervert, hogy adjon vissza 5 sort, de előbb hagyja ki a válasz első 10 sorát. Így nézne ki a kérés:

SELECT * FROM product
LIMIT 5
OFFSET 10

A következő lekérdezési eredményt kapjuk:

id név márka ár számol
tizenegy Fotel Bosch 44.00 8
12 virágcserép Okosvirág 99.00 9
13 Állvány IKEA 100.00 10

A szerver csak 3 sort adott vissza, ami azt jelenti, hogy összesen 13 sor volt a táblázatunkban. A szerver kihagyta az első 10-et, és visszaadta a következő 5-öt.

4.3 KIVÁLASZTÁS

Egy másik hasznos kulcsszó a DISTINCT. Akkor használatos, ha ismétlődő rekordok vannak a táblázatban, és el akarjuk távolítani a másolatokat.

Honnan származnak ismétlődések a táblázatunkban? Lehetséges, hogy nincsenek ismétlődések a táblázatban, de a lekérdezés eredményeként ez egyszerű. Írjunk egy lekérdezést, amely visszaadja az összes általunk forgalmazott termék márkáját. Így nézne ki a kérés:

SELECT brand FROM product

A következő lekérdezési eredményt kapjuk:

márka
IKEA
IKEA
IKEA
IKEA
Bosch
Bosch
LG
LG
IKEA
Bosch
Bosch
Okosvirág
IKEA

Könnyen belátható, hogy ebben a táblázatban ismétlődő sorok vannak. Annak biztosítása érdekében, hogy ne legyenek ismétlődések, és a kulcsszót kell használnia DISTINCT. Így fog kinézni a javított kérés:

SELECT DISTINCT brand
FROM product

A következő lekérdezési eredményt kapjuk:

márka
IKEA
Bosch
LG
Okosvirág

Sokkal jobban. Nem? ;)

4.4 MEGRENDELÉS

És végül elérkeztünk a válogatáshoz . Egy lekérdezés eredményeinek rendezéséhez a kulcsszót kell használnia ORDER BY. Technikailag ez két szó, de a lényeg nem fontos. Két szó, egy operátor.

A kulcsszó után kell írni WHERE, de LIMITa és elé OFFSET. ORDER BYHa utána ír LIMIT, akkor az SQL szerver egyszerűen hibát ad vissza.

Általában ez az operátor így néz ki:

ORDER BY column order

Ahol az oszlop az oszlop neve a táblázatban / rendezési eredményben. És a sorrend a rendezési sorrend.

A rendezési sorrend háromféle lehet:

  • ASC(Növekvőből) - növekvő;
  • DESC(a Descending-ből) - csökkenő;
  • Nincs megadva – használatban leszASC

Írjunk egy lekérdezést, amely a termékek listáját adja vissza, ár szerint, növekvő sorrendben. Így nézne ki a kérés:

SELECT * FROM product
ORDER BY price ASC
LIMIT 10

A következő lekérdezési eredményt kapjuk:

id név márka ár számol
2 Szék IKEA 5.00 45
8 Lámpa LG 15.00 100
1 asztal IKEA 20.00 15
6 Polc Bosch 25.00 114
tizenegy Fotel Bosch 44.00 8
4 Ágy IKEA 75.00 10
3 Kanapé IKEA 80.00 10
12 virágcserép Okosvirág 99.00 9
9 Öltözködőasztal IKEA 99.00 10
13 Állvány IKEA 100.00 10

Ugyanezt az eredményt kapjuk, ha nem adjuk meg a rendezési sorrendet - kihagyjuk a szót ASC.

4.5 ORDER BY több oszlopban

Az operátor ORDER BYlehetővé teszi az eredmény több oszlop szerinti rendezését. Ez nagyon hasznos lehet, ha az első oszlopban sok ismétlődő elem található. Az operátor általános formája a következő:

ORDER BY column 1 order 1, column 2 order 2, column 3 order 3

Más szóval, ha az első oszlop szerinti rendezés után több azonos érték van a közelben, akkor a rendszer a második oszlop szerint rendezi őket, és így tovább.

Írjunk lekérdezést, amely termékeinket márka szerint, az azonos márkájú termékek esetében pedig számuk szerinti csökkenő sorrendbe rendezi. Így nézne ki a kérés:

SELECT * FROM product
ORDER BY brand ASC, count
DESC

A következő lekérdezési eredményt kapjuk:

id név márka ár számol
6 Polc Bosch 25.00 114
5 Fülke Bosch 125.00 15
10 Lemez Bosch 199,00 10
tizenegy Fotel Bosch 44.00 8
2 Szék IKEA 5.00 45
1 asztal IKEA 20.00 15
9 Öltözködőasztal IKEA 99.00 10
13 Állvány IKEA 100.00 10
4 Ágy IKEA 75.00 10
3 Kanapé IKEA 80.00 10
8 Lámpa LG 15.00 100
7 tévé LG 350,00 4
12 virágcserép Okosvirág 99.00 9

Nézze meg alaposan a táblázatot – sorai márkanév szerint vannak rendezve (ábécé sorrendben), az azonos márkanévvel rendelkező sorok pedig termékszám szerint vannak rendezve csökkenő sorrendben (utolsó oszlop).