4.1 GRENSE

Hvis du forventer at SQL-spørringen din skal returnere for mye data, kan du begrense det maksimale antallet på forhånd. Tross alt kan tabeller inneholde tusenvis eller til og med millioner av rader.

SQL gjør det veldig enkelt å begrense antall rader i resultatet av en spørring ved å bruke LIMIT. Dette nøkkelordet brukes helt på slutten av SQL-spørringen og ser slik ut:

LIMIT quantity

La oss skrive en spørring mot produkttabellen, som inneholder en liste over butikkens produkter. Men siden vi har en meget suksessrik butikk og vi selger mange produkter, ønsker vi kun å få de 10 første linjene av svaret. Slik vil forespørselen se ut:

SELECT * FROM product
LIMIT 10

Og vi får følgende spørreresultat:

id Navn merke pris telle
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 Skap Bosch 125,00 15
6 Hylle Hylle 25.00 114
7 TV LG 350,00 4
8 Lampe LG 15.00 100
9 Kommode IKEA 99,00 10
10 Tallerken Bosch 199,00 10

Nå vil vi bare be om de første 5 radene. Slik vil forespørselen se ut:

SELECT * FROM product
LIMIT 5

Vi får følgende spørreresultat:

id Navn merke pris telle
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 Skap Bosch 125,00 15

4.2 OFFSET

Forrige gang lærte vi å begrense antall linjer i serversvaret. Og nå, i stedet for tusenvis av rader fra produkttabellen, kan vi hente de første 10 radene og vise dem til brukeren. Det er perfekt. Men hvordan viser vi de andre 10 radene? Og den tredje?

Hvis vi skriver LIMIT 20, eller LIMIT 30, vil ikke serveren returnere henholdsvis 20 og 30 rader?

Det er for dette tilfellet at SQL har et spesielt nøkkelord OFFSETsom du kan be serveren om å hoppe over N linjer med i svaret. Dette nøkkelordet brukes helt på slutten av SQL-spørringen (etter LIMIT) og ser slik ut:

OFFSET quantity

La oss skrive en spørring på produkttabellen og prøve å få postene 11 til 15. Med andre ord ber vi serveren returnere 5 rader til oss, men hoppe over de første 10 radene i svaret først. Slik vil forespørselen se ut:

SELECT * FROM product
LIMIT 5
OFFSET 10

Vi får følgende spørreresultat:

id Navn merke pris telle
elleve Lenestol Bosch 44,00 8
12 blomsterpotte Smartflower 99,00 9
1. 3 Stå IKEA 100,00 10

Serveren returnerte bare 3 rader, noe som betyr at det var 13 rader totalt i tabellen vår. Serveren hoppet over de første 10 og returnerte de neste 5.

4.3 VELG DISTINKT

Et annet nyttig nøkkelord er DISTINCT. Den brukes når det er duplikatposter i tabellen og vi ønsker å fjerne duplikatene.

Hvor kommer duplikater fra i tabellen vår? Det er kanskje ikke duplikater i tabellen, men som et resultat av spørringen er det enkelt. La oss skrive en forespørsel som vil returnere merkene til alle produktene vi selger. Slik vil forespørselen se ut:

SELECT brand FROM product

Vi får følgende spørreresultat:

merke
IKEA
IKEA
IKEA
IKEA
Bosch
Bosch
LG
LG
IKEA
Bosch
Bosch
Smartflower
IKEA

Det er lett å se at det er dupliserte rader i denne tabellen. Det er for å sikre at det ikke er noen duplikater, og du må bruke søkeordet DISTINCT. Slik vil den korrigerte forespørselen se ut:

SELECT DISTINCT brand
FROM product

Vi får følgende spørreresultat:

merke
IKEA
Bosch
LG
Smartflower

Så mye bedre. Er det ikke? ;)

4.4 BESTILL ETTER

Og til slutt kom vi til sorteringen . For å sortere resultatene av et søk, må du bruke søkeordet ORDER BY. Teknisk sett er dette to ord, men essensen er ikke viktig. To ord, en operatør.

Det må skrives etter nøkkelordet WHERE, men før LIMITog OFFSET. Hvis du skriver ORDER BYetter LIMIT, vil SQL-serveren ganske enkelt returnere en feilmelding til deg.

Generelt ser denne operatøren slik ut:

ORDER BY column order

Hvor kolonne er navnet på kolonnen i tabellen / sorteringsresultatet. Og rekkefølgen er sorteringsrekkefølgen.

Sorteringsrekkefølgen kan være av tre typer:

  • ASC(fra Ascending) - stigende;
  • DESC(fra synkende) - synkende;
  • Ikke spesifisert - vil bli bruktASC

La oss skrive en spørring som vil returnere en liste over produkter sortert etter pris i stigende rekkefølge. Slik vil forespørselen se ut:

SELECT * FROM product
ORDER BY price ASC
LIMIT 10

Vi får følgende spørreresultat:

id Navn merke pris telle
2 Stol IKEA 5.00 45
8 Lampe LG 15.00 100
1 Bord IKEA 20.00 15
6 Hylle Bosch 25.00 114
elleve Lenestol Bosch 44,00 8
4 Seng IKEA 75,00 10
3 Sofa IKEA 80,00 10
12 blomsterpotte Smartflower 99,00 9
9 Kommode IKEA 99,00 10
1. 3 Stå IKEA 100,00 10

Vi vil få samme resultat hvis vi ikke spesifiserer sorteringsrekkefølgen - vi hopper over ordet ASC.

4.5 BESTILL ETTER på tvers av flere kolonner

Operatøren ORDER BYlar deg sortere resultatet etter flere kolonner. Dette kan være veldig nyttig når den første kolonnen har mange dupliserte elementer. Den generelle formen for denne operatøren er som følger:

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

Med andre ord, hvis du etter sortering etter den første kolonnen har flere identiske verdier i nærheten, blir de sortert etter den andre kolonnen, og så videre.

La oss skrive en spørring som vil sortere produktene våre etter merke, og for produkter med samme merke - i synkende rekkefølge etter deres nummer. Slik vil forespørselen se ut:

SELECT * FROM product
ORDER BY brand ASC, count
DESC

Vi får følgende spørreresultat:

id Navn merke pris telle
6 Hylle Bosch 25.00 114
5 Skap Bosch 125,00 15
10 Tallerken Bosch 199,00 10
elleve Lenestol Bosch 44,00 8
2 Stol IKEA 5.00 45
1 Bord IKEA 20.00 15
9 Kommode IKEA 99,00 10
1. 3 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 blomsterpotte Smartflower 99,00 9

Se nøye på tabellen - radene er sortert etter merkenavn (alfabetisk rekkefølge), og rader med samme merkenavn er sortert etter produktnummer i synkende rekkefølge (siste kolonne).