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 OFFSET
som 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 LIMIT
og OFFSET
. Hvis du skriver ORDER BY
etter 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 brukt
ASC
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 BY
lar 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).