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, OFFSETsom 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 LIMITog OFFSET. Hvis du skriver ORDER BYefter 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 brugtASC

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 BYgiver 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).