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 OFFSETmed 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 , WHEREmen före LIMIToch OFFSET. Om du skriver ORDER BYefter 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Ă€ndasASC

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 BYlÄ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).