4.1 GRĂNS
Om du förvÀntar dig att din SQL-frÄga ska returnera för mycket data kan du begrÀnsa det maximala antalet i förvÀg. NÀr allt kommer omkring kan tabeller innehÄlla tusentals eller till och med miljontals rader.
SQL gör det mycket enkelt att begrÀnsa antalet rader i resultatet av en frÄga med hjÀlp av LIMIT
. Det hÀr nyckelordet anvÀnds i slutet av SQL-frÄgan och ser ut sÄ hÀr:
LIMIT quantity
LÄt oss skriva en frÄga mot produkttabellen, som innehÄller en lista över vÄr butiks produkter. Men eftersom vi har en mycket framgÄngsrik butik och vi sÀljer mÄnga produkter vill vi bara fÄ de första 10 raderna av svaret. SÄ hÀr skulle begÀran se ut:
SELECT * FROM product
LIMIT 10
Och vi fÄr följande frÄgeresultat:
id | namn | varumÀrke | pris | rÀkna |
---|---|---|---|---|
1 | Tabell | IKEA | 20.00 | 15 |
2 | Stol | IKEA | 5.00 | 45 |
3 | Soffa | IKEA | 80.00 | 10 |
4 | SĂ€ng | IKEA | 75,00 | 10 |
5 | Garderob | Bosch | 125.00 | 15 |
6 | Hylla | Hylla | 25.00 | 114 |
7 | TV | LG | 350,00 | 4 |
8 | Lampa | LG | 15.00 | 100 |
9 | ByrÄ | IKEA | 99,00 | 10 |
10 | Tallrik | Bosch | 199.00 | 10 |
Nu kommer vi att begÀra endast de första 5 raderna. SÄ hÀr skulle begÀran se ut:
SELECT * FROM product
LIMIT 5
Vi fÄr följande frÄgeresultat:
id | namn | varumÀrke | pris | rÀkna |
---|---|---|---|---|
1 | Tabell | IKEA | 20.00 | 15 |
2 | Stol | IKEA | 5.00 | 45 |
3 | Soffa | IKEA | 80.00 | 10 |
4 | SĂ€ng | IKEA | 75,00 | 10 |
5 | Garderob | Bosch | 125.00 | 15 |
4.2 OFFSET
Förra gÄngen lÀrde vi oss hur man begrÀnsar antalet rader i serversvaret. Och nu, istÀllet för tusentals rader frÄn produkttabellen, kan vi hÀmta de första 10 raderna och visa dem för anvÀndaren. Det Àr perfekt. Men hur visar vi de andra 10 raderna? Och den tredje?
Om vi ââskriver LIMIT 20
, eller LIMIT 30
, returnerar inte servern 20 respektive 30 rader?
Det Àr för det hÀr fallet som SQL har ett speciellt nyckelord OFFSET
med vilket du kan be servern att hoppa över N rader i sitt svar. Det hÀr nyckelordet anvÀnds i slutet av SQL-frÄgan (efter LIMIT
) och ser ut sÄ hÀr:
OFFSET quantity
LÄt oss skriva en frÄga pÄ produkttabellen och försöka fÄ posterna 11 till 15. Med andra ord ber vi servern att returnera 5 rader till oss, men hoppa över de första 10 raderna av svaret först. SÄ hÀr skulle begÀran se ut:
SELECT * FROM product
LIMIT 5
OFFSET 10
Vi fÄr följande frÄgeresultat:
id | namn | varumÀrke | pris | rÀkna |
---|---|---|---|---|
elva | FÄtölj | Bosch | 44.00 | 8 |
12 | blomkruka | Smartflower | 99,00 | 9 |
13 | StÄ | IKEA | 100,00 | 10 |
Servern returnerade endast 3 rader, vilket betyder att det fanns 13 rader totalt i vÄr tabell. Servern hoppade över de första 10 och returnerade de nÀsta 5.
4.3 VĂLJ DISTINKT
Ett annat anvÀndbart nyckelord Àr DISTINCT
. Den anvÀnds nÀr det finns dubbletter i tabellen och vi vill ta bort dubbletterna.
Var kommer dubbletter ifrÄn i vÄr tabell? Det kanske inte finns dubbletter i tabellen, men som ett resultat av frÄgan Àr det enkelt. LÄt oss skriva en frÄga som kommer att returnera varumÀrkena för alla produkter vi sÀljer. SÄ hÀr skulle begÀran se ut:
SELECT brand FROM product
Vi fÄr följande frÄgeresultat:
varumÀrke |
---|
IKEA |
IKEA |
IKEA |
IKEA |
Bosch |
Bosch |
LG |
LG |
IKEA |
Bosch |
Bosch |
Smartflower |
IKEA |
Det Àr lÀtt att se att det finns dubbletter av rader i den hÀr tabellen. Det Àr för att sÀkerstÀlla att det inte finns nÄgra dubbletter och du mÄste anvÀnda nyckelordet DISTINCT
. SÄ hÀr kommer den korrigerade begÀran att se ut:
SELECT DISTINCT brand
FROM product
Vi fÄr följande frÄgeresultat:
varumÀrke |
---|
IKEA |
Bosch |
LG |
Smartflower |
SĂ„ mycket bĂ€ttre. Ăr det inte? ;)
4.4 BESTĂLL AV
Och Àntligen fick vi sortera . För att sortera resultaten av en frÄga mÄste du anvÀnda nyckelordet ORDER BY
. Tekniskt sett Àr detta tvÄ ord, men essensen Àr inte viktig. TvÄ ord, en operatör.
Det mÄste skrivas efter nyckelordet , WHERE
men före LIMIT
och OFFSET
. Om du skriver ORDER BY
efter LIMIT
, kommer SQL-servern helt enkelt att returnera ett felmeddelande till dig.
I allmÀnhet ser den hÀr operatören ut sÄ hÀr:
ORDER BY column order
DÀr kolumn Àr namnet pÄ kolumnen i tabellen/sorteringsresultatet. Och ordningen Àr sorteringsordningen.
Sorteringsordningen kan vara av tre typer:
ASC
(frÄn stigande) - stigande;DESC
(frÄn fallande) - fallande;- Ej specificerat - kommer att anvÀndas
ASC
LÄt oss skriva en frÄga som kommer att returnera en lista med produkter sorterade efter pris i stigande ordning. SÄ hÀr skulle begÀran se ut:
SELECT * FROM product
ORDER BY price ASC
LIMIT 10
Vi fÄr följande frÄgeresultat:
id | namn | varumÀrke | pris | rÀkna |
---|---|---|---|---|
2 | Stol | IKEA | 5.00 | 45 |
8 | Lampa | LG | 15.00 | 100 |
1 | Tabell | IKEA | 20.00 | 15 |
6 | Hylla | Bosch | 25.00 | 114 |
elva | FÄtölj | Bosch | 44.00 | 8 |
4 | SĂ€ng | IKEA | 75,00 | 10 |
3 | Soffa | IKEA | 80.00 | 10 |
12 | blomkruka | Smartflower | 99,00 | 9 |
9 | ByrÄ | IKEA | 99,00 | 10 |
13 | StÄ | IKEA | 100,00 | 10 |
Vi kommer att fÄ samma resultat om vi inte anger sorteringsordningen - vi hoppar över ordet ASC
.
4.5 BESTĂLL EFTER över flera kolumner
Operatören ORDER BY
lÄter dig sortera resultatet efter flera kolumner. Detta kan vara mycket anvÀndbart nÀr den första kolumnen har mÄnga dubbletter av element. Den allmÀnna formen för denna operatör Àr följande:
ORDER BY column 1 order 1, column 2 order 2, column 3 order 3
Med andra ord, om du efter sortering efter den första kolumnen har flera identiska vÀrden i nÀrheten, sÄ sorteras de efter den andra kolumnen och sÄ vidare.
LÄt oss skriva en frÄga som kommer att sortera vÄra produkter efter mÀrke och för produkter med samma mÀrke - i fallande ordning efter deras nummer. SÄ hÀr skulle begÀran se ut:
SELECT * FROM product
ORDER BY brand ASC, count
DESC
Vi fÄr följande frÄgeresultat:
id | namn | varumÀrke | pris | rÀkna |
---|---|---|---|---|
6 | Hylla | Bosch | 25.00 | 114 |
5 | Garderob | Bosch | 125.00 | 15 |
10 | Tallrik | Bosch | 199.00 | 10 |
elva | FÄtölj | Bosch | 44.00 | 8 |
2 | Stol | IKEA | 5.00 | 45 |
1 | Tabell | IKEA | 20.00 | 15 |
9 | ByrÄ | IKEA | 99,00 | 10 |
13 | StÄ | IKEA | 100,00 | 10 |
4 | SĂ€ng | IKEA | 75,00 | 10 |
3 | Soffa | IKEA | 80.00 | 10 |
8 | Lampa | LG | 15.00 | 100 |
7 | TV | LG | 350,00 | 4 |
12 | blomkruka | Smartflower | 99,00 | 9 |
Titta noga pÄ tabellen - dess rader Àr sorterade efter varumÀrke (alfabetisk ordning), och rader med samma varumÀrke sorteras efter produktnummer i fallande ordning (sista kolumnen).
GO TO FULL VERSION