4.1 GRÆNSE
Hvis du forventer, at din SQL-forespørgsel returnerer for mange data, kan du begrænse det maksimale antal på forhånd. Tabeller kan trods alt indeholde tusindvis eller endda millioner af rækker.
SQL gør det meget nemt at begrænse antallet af rækker i resultatet af en forespørgsel ved hjælp af LIMIT
. Dette nøgleord bruges til allersidst i SQL-forespørgslen og ser sådan ud:
LIMIT quantity
Lad os skrive en forespørgsel mod produkttabellen, som indeholder en liste over vores butiks produkter. Men da vi har en meget succesfuld butik, og vi sælger en masse produkter, ønsker vi kun at få de første 10 linjer af svaret. Sådan ser anmodningen ud:
SELECT * FROM product
LIMIT 10
Og vi får følgende forespørgselsresultat:
id | navn | mærke | pris | tælle |
---|---|---|---|---|
1 | Bord | IKEA | 20.00 | 15 |
2 | Stol | IKEA | 5.00 | 45 |
3 | Sofa | IKEA | 80,00 | 10 |
4 | Seng | IKEA | 75,00 | 10 |
5 | Skab | Bosch | 125,00 | 15 |
6 | Hylde | Hylde | 25.00 | 114 |
7 | TV | LG | 350,00 | 4 |
8 | Lampe | LG | 15.00 | 100 |
9 | Kommode | IKEA | 99,00 | 10 |
10 | Plade | Bosch | 199,00 | 10 |
Nu vil vi kun anmode om de første 5 rækker. Sådan ser anmodningen ud:
SELECT * FROM product
LIMIT 5
Vi får følgende forespørgselsresultat:
id | navn | mærke | pris | tælle |
---|---|---|---|---|
1 | Bord | IKEA | 20.00 | 15 |
2 | Stol | IKEA | 5.00 | 45 |
3 | Sofa | IKEA | 80,00 | 10 |
4 | Seng | IKEA | 75,00 | 10 |
5 | Skab | Bosch | 125,00 | 15 |
4.2 OFFSET
Sidste gang lærte vi, hvordan man begrænser antallet af linjer i serversvaret. Og nu, i stedet for tusindvis af rækker fra produkttabellen, kan vi få de første 10 rækker og vise dem til brugeren. Det er perfekt. Men hvordan viser vi de anden 10 rækker? Og den tredje?
Hvis vi skriver LIMIT 20
, eller LIMIT 30
, vil serveren ikke returnere henholdsvis 20 og 30 rækker?
Det er for dette tilfælde, at SQL har et særligt nøgleord, OFFSET
som du kan bede serveren om at springe N linjer over i sit svar. Dette nøgleord bruges til allersidst i SQL-forespørgslen (efter LIMIT
) og ser sådan ud:
OFFSET quantity
Lad os skrive en forespørgsel på produkttabellen og prøve at få post 11 til 15. Med andre ord beder vi serveren om at returnere 5 rækker til os, men springe de første 10 rækker af svaret først. Sådan ser anmodningen ud:
SELECT * FROM product
LIMIT 5
OFFSET 10
Vi får følgende forespørgselsresultat:
id | navn | mærke | pris | tælle |
---|---|---|---|---|
elleve | Lænestol | Bosch | 44,00 | 8 |
12 | blomsterkrukke | Smartflower | 99,00 | 9 |
13 | Stå | IKEA | 100,00 | 10 |
Serveren returnerede kun 3 rækker, hvilket betyder, at der var 13 rækker i alt i vores tabel. Serveren sprang de første 10 over og returnerede de næste 5.
4.3 VÆLG DISTINKT
Et andet nyttigt søgeord er DISTINCT
. Det bruges, når der er dubletter i tabellen, og vi ønsker at fjerne dubletterne.
Hvor kommer dubletter fra i vores tabel? Der er muligvis ikke dubletter i tabellen, men som følge af forespørgslen er det nemt. Lad os skrive en forespørgsel, der returnerer mærkerne for alle de produkter, vi sælger. Sådan ser anmodningen ud:
SELECT brand FROM product
Vi får følgende forespørgselsresultat:
mærke |
---|
IKEA |
IKEA |
IKEA |
IKEA |
Bosch |
Bosch |
LG |
LG |
IKEA |
Bosch |
Bosch |
Smartflower |
IKEA |
Det er let at se, at der er duplikerede rækker i denne tabel. Det er for at sikre, at der ikke er dubletter, og du skal bruge søgeordet DISTINCT
. Sådan ser den rettede anmodning ud:
SELECT DISTINCT brand
FROM product
Vi får følgende forespørgselsresultat:
mærke |
---|
IKEA |
Bosch |
LG |
Smartflower |
Så meget bedre. Er det ikke? ;)
4.4 BESTIL EFTER
Og endelig kom vi i gang med at sortere . For at sortere resultaterne af en forespørgsel skal du bruge søgeordet ORDER BY
. Teknisk set er det to ord, men essensen er ikke vigtig. To ord, en operatør.
Det skal skrives efter søgeordet WHERE
, men før LIMIT
og OFFSET
. Hvis du skriver ORDER BY
efter LIMIT
, vil SQL-serveren blot returnere en fejl til dig.
Generelt ser denne operatør sådan ud:
ORDER BY column order
Hvor kolonne er navnet på kolonnen i tabellen / sorteringsresultatet. Og rækkefølgen er sorteringsrækkefølgen.
Sorteringsrækkefølgen kan være af tre typer:
ASC
(fra Stigende) - stigende;DESC
(fra Descending) - faldende;- Ikke specificeret - vil blive brugt
ASC
Lad os skrive en forespørgsel, der returnerer en liste over produkter sorteret efter pris i stigende rækkefølge. Sådan ser anmodningen ud:
SELECT * FROM product
ORDER BY price ASC
LIMIT 10
Vi får følgende forespørgselsresultat:
id | navn | mærke | pris | tælle |
---|---|---|---|---|
2 | Stol | IKEA | 5.00 | 45 |
8 | Lampe | LG | 15.00 | 100 |
1 | Bord | IKEA | 20.00 | 15 |
6 | Hylde | Bosch | 25.00 | 114 |
elleve | Lænestol | Bosch | 44,00 | 8 |
4 | Seng | IKEA | 75,00 | 10 |
3 | Sofa | IKEA | 80,00 | 10 |
12 | blomsterkrukke | Smartflower | 99,00 | 9 |
9 | Kommode | IKEA | 99,00 | 10 |
13 | Stå | IKEA | 100,00 | 10 |
Vi får det samme resultat, hvis vi ikke angiver sorteringsrækkefølgen - vi springer ordet over ASC
.
4.5 BESTIL EFTER på tværs af flere kolonner
Operatøren ORDER BY
giver dig mulighed for at sortere resultatet efter flere kolonner. Dette kan være meget nyttigt, når den første kolonne har mange duplikerede elementer. Den generelle form for denne operatør er som følger:
ORDER BY column 1 order 1, column 2 order 2, column 3 order 3
Med andre ord, hvis du efter sortering efter den første kolonne har flere identiske værdier i nærheden, så sorteres de efter den anden kolonne, og så videre.
Lad os skrive en forespørgsel, der vil sortere vores produkter efter mærke og for produkter med samme mærke - i faldende rækkefølge efter deres nummer. Sådan ser anmodningen ud:
SELECT * FROM product
ORDER BY brand ASC, count
DESC
Vi får følgende forespørgselsresultat:
id | navn | mærke | pris | tælle |
---|---|---|---|---|
6 | Hylde | Bosch | 25.00 | 114 |
5 | Skab | Bosch | 125,00 | 15 |
10 | Plade | Bosch | 199,00 | 10 |
elleve | Lænestol | Bosch | 44,00 | 8 |
2 | Stol | IKEA | 5.00 | 45 |
1 | Bord | IKEA | 20.00 | 15 |
9 | Kommode | IKEA | 99,00 | 10 |
13 | Stå | IKEA | 100,00 | 10 |
4 | Seng | IKEA | 75,00 | 10 |
3 | Sofa | IKEA | 80,00 | 10 |
8 | Lampe | LG | 15.00 | 100 |
7 | TV | LG | 350,00 | 4 |
12 | blomsterkrukke | Smartflower | 99,00 | 9 |
Se nøje på tabellen - dens rækker er sorteret efter mærkenavn (alfabetisk rækkefølge), og rækker med samme mærke er sorteret efter produktnummer i faldende rækkefølge (sidste kolonne).
GO TO FULL VERSION