4.1 LIMIET
Als u verwacht dat uw SQL-query te veel gegevens oplevert, kunt u het maximale aantal vooraf beperken. Tabellen kunnen immers duizenden of zelfs miljoenen rijen bevatten.
SQL maakt het heel eenvoudig om het aantal rijen in het resultaat van een query te beperken met behulp van de LIMIT
. Dit trefwoord wordt helemaal aan het einde van de SQL-query gebruikt en ziet er als volgt uit:
LIMIT quantity
Laten we een query schrijven voor de producttabel, die een lijst bevat met de producten van onze winkel. Maar aangezien we een zeer succesvolle winkel hebben en we veel producten verkopen, willen we alleen de eerste 10 regels van het antwoord krijgen. Dit is hoe dat verzoek eruit zou zien:
SELECT * FROM product
LIMIT 10
En we krijgen het volgende zoekresultaat:
ID kaart | naam | merk | prijs | graaf |
---|---|---|---|---|
1 | Tafel | Ikea | 20.00 uur | 15 |
2 | Stoel | Ikea | 5.00 | 45 |
3 | Bank | Ikea | 80.00 | 10 |
4 | Bed | Ikea | 75.00 | 10 |
5 | Kast | Bosch | 125.00 | 15 |
6 | Plank | Plank | 25.00 uur | 114 |
7 | TV | LG | 350.00 | 4 |
8 | Lamp | LG | 15.00 uur | 100 |
9 | Dressoir | Ikea | 99.00 | 10 |
10 | Bord | Bosch | 199.00 | 10 |
Nu zullen we alleen de eerste 5 rijen opvragen. Dit is hoe dat verzoek eruit zou zien:
SELECT * FROM product
LIMIT 5
We krijgen het volgende zoekresultaat:
ID kaart | naam | merk | prijs | graaf |
---|---|---|---|---|
1 | Tafel | Ikea | 20.00 uur | 15 |
2 | Stoel | Ikea | 5.00 | 45 |
3 | Bank | Ikea | 80.00 | 10 |
4 | Bed | Ikea | 75.00 | 10 |
5 | Kast | Bosch | 125.00 | 15 |
4.2 VERSCHILLEN
De vorige keer hebben we geleerd hoe we het aantal regels in de serverreactie kunnen beperken. En nu kunnen we, in plaats van duizenden rijen uit de producttabel, de eerste 10 rijen ophalen en aan de gebruiker tonen. Het is perfect. Maar hoe geven we de tweede 10 rijen weer? En de derde?
Als we schrijven LIMIT 20
, of LIMIT 30
, retourneert de server dan niet respectievelijk 20 en 30 rijen?
Het is voor dit geval dat SQL een speciaal trefwoord heeft OFFSET
waarmee je de server kunt vragen om N regels over te slaan in zijn antwoord. Dit trefwoord wordt helemaal aan het einde van de SQL-query gebruikt (na LIMIT
) en ziet er als volgt uit:
OFFSET quantity
Laten we een query op de producttabel schrijven en proberen records 11 tot 15 te krijgen. Met andere woorden, we vragen de server om 5 rijen naar ons terug te sturen, maar slaan eerst de eerste 10 rijen van het antwoord over. Dit is hoe dat verzoek eruit zou zien:
SELECT * FROM product
LIMIT 5
OFFSET 10
We krijgen het volgende zoekresultaat:
ID kaart | naam | merk | prijs | graaf |
---|---|---|---|---|
elf | Fauteuil | Bosch | 44.00 uur | 8 |
12 | bloempot | Slimme bloem | 99.00 | 9 |
13 | Stellage | Ikea | 100.00 | 10 |
De server heeft slechts 3 rijen geretourneerd, wat betekent dat er in totaal 13 rijen in onze tabel waren. De server heeft de eerste 10 overgeslagen en de volgende 5 geretourneerd.
4.3 SELECTEER DISTINCT
Een ander handig zoekwoord is DISTINCT
. Het wordt gebruikt wanneer er dubbele records in de tabel staan en we de duplicaten willen verwijderen.
Waar komen duplicaten vandaan in onze tabel? Er zijn mogelijk geen duplicaten in de tabel, maar als resultaat van de query is het eenvoudig. Laten we een query schrijven die de merken retourneert van alle producten die we verkopen. Dit is hoe dat verzoek eruit zou zien:
SELECT brand FROM product
We krijgen het volgende zoekresultaat:
merk |
---|
Ikea |
Ikea |
Ikea |
Ikea |
Bosch |
Bosch |
LG |
LG |
Ikea |
Bosch |
Bosch |
Slimme bloem |
Ikea |
Het is gemakkelijk te zien dat er dubbele rijen in deze tabel staan. Het is om ervoor te zorgen dat er geen duplicaten zijn en dat u het trefwoord moet gebruiken DISTINCT
. Zo ziet het gecorrigeerde verzoek eruit:
SELECT DISTINCT brand
FROM product
We krijgen het volgende zoekresultaat:
merk |
---|
Ikea |
Bosch |
LG |
Slimme bloem |
Zo veel beter. Is het niet? ;)
4.4 BESTELLEN DOOR
En uiteindelijk gingen we sorteren . Om de resultaten van een zoekopdracht te sorteren, moet u het trefwoord gebruiken ORDER BY
. Technisch gezien zijn dit twee woorden, maar de essentie is niet belangrijk. Twee woorden, één operator.
Het moet na het trefwoord worden geschreven WHERE
, maar vóór LIMIT
en OFFSET
. ORDER BY
Als u achter schrijft LIMIT
, zal de SQL-server u gewoon een foutmelding terugsturen.
Over het algemeen ziet deze operator er zo uit:
ORDER BY column order
Waar kolom de naam is van de kolom in de tabel / sorteerresultaat. En de volgorde is de sorteervolgorde.
De sorteervolgorde kan uit drie typen bestaan:
ASC
(van oplopend) - oplopend;DESC
(van aflopend) - aflopend;- Niet gespecificeerd - zal worden gebruikt
ASC
Laten we een query schrijven die een lijst met producten retourneert, gesorteerd op prijs in oplopende volgorde. Dit is hoe dat verzoek eruit zou zien:
SELECT * FROM product
ORDER BY price ASC
LIMIT 10
We krijgen het volgende zoekresultaat:
ID kaart | naam | merk | prijs | graaf |
---|---|---|---|---|
2 | Stoel | Ikea | 5.00 | 45 |
8 | Lamp | LG | 15.00 uur | 100 |
1 | Tafel | Ikea | 20.00 uur | 15 |
6 | Plank | Bosch | 25.00 uur | 114 |
elf | Fauteuil | Bosch | 44.00 uur | 8 |
4 | Bed | Ikea | 75.00 | 10 |
3 | Bank | Ikea | 80.00 | 10 |
12 | bloempot | Slimme bloem | 99.00 | 9 |
9 | Dressoir | Ikea | 99.00 | 10 |
13 | Stellage | Ikea | 100.00 | 10 |
We krijgen hetzelfde resultaat als we de sorteervolgorde niet specificeren - we slaan het woord over ASC
.
4.5 ORDER BY over meerdere kolommen
Met de operator ORDER BY
kunt u het resultaat sorteren op meerdere kolommen. Dit kan erg handig zijn als de eerste kolom veel dubbele elementen bevat. De algemene vorm van deze operator is als volgt:
ORDER BY column 1 order 1, column 2 order 2, column 3 order 3
Met andere woorden, als je na het sorteren op de eerste kolom meerdere identieke waarden in de buurt hebt, dan worden ze gesorteerd op de tweede kolom, enzovoort.
Laten we een zoekopdracht schrijven die onze producten op merk sorteert, en voor producten met hetzelfde merk - in aflopende volgorde van hun nummer. Dit is hoe dat verzoek eruit zou zien:
SELECT * FROM product
ORDER BY brand ASC, count
DESC
We krijgen het volgende zoekresultaat:
ID kaart | naam | merk | prijs | graaf |
---|---|---|---|---|
6 | Plank | Bosch | 25.00 uur | 114 |
5 | Kast | Bosch | 125.00 | 15 |
10 | Bord | Bosch | 199.00 | 10 |
elf | Fauteuil | Bosch | 44.00 uur | 8 |
2 | Stoel | Ikea | 5.00 | 45 |
1 | Tafel | Ikea | 20.00 uur | 15 |
9 | Dressoir | Ikea | 99.00 | 10 |
13 | Stellage | Ikea | 100.00 | 10 |
4 | Bed | Ikea | 75.00 | 10 |
3 | Bank | Ikea | 80.00 | 10 |
8 | Lamp | LG | 15.00 uur | 100 |
7 | TV | LG | 350.00 | 4 |
12 | bloempot | Slimme bloem | 99.00 | 9 |
Kijk goed naar de tabel - de rijen zijn gesorteerd op merknaam (alfabetische volgorde) en rijen met dezelfde merknaam zijn gesorteerd op productnummer in aflopende volgorde (laatste kolom).