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 20
Ha , 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, OFFSET
amellyel 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 LIMIT
a és elé OFFSET
. ORDER BY
Ha 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 lesz
ASC
Í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 BY
lehető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).
GO TO FULL VERSION