ORDER BY klausul. Hur definieras SQL-sortering? Hur man sorterar poster i en sql-fråga

ORDER BY klausul.  Hur definieras SQL-sortering?  Hur man sorterar poster i en sql-fråga
ORDER BY klausul. Hur definieras SQL-sortering? Hur man sorterar poster i en sql-fråga

Vid hämtning av data kan det vara viktigt att få det i en viss ordnad form. Sortering kan göras efter alla fält med vilken datatyp som helst. Detta kan vara en stigande eller fallande sortering för numeriska fält. För tecken (text) fält kan detta sorteras i alfabetisk ordning, även om det i huvudsak också sorteras i stigande eller fallande ordning. Det kan också utföras i vilken riktning som helst - från A till Ö och vice versa från Ö till A.

Kärnan i sorteringsprocessen är att reducera sekvensen till en viss ordning. Du kan lära dig mer om sortering i artikeln "Sorteringsalgoritmer."

2, 4, 1, 5, 9

bör resultera i en ordnad sekvens:

1, 2, 4, 5, 6

På samma sätt, när du sorterar i stigande ordning av strängvärden:

Ivanov Ivan, Petrov Petr, Ivanov Andrey

resultatet bör bli:

Ivanov Andrey, Ivanov Ivan, Petrov Petrov

Här har raden "Andrey Ivanov" flyttat till början, eftersom jämförelsen av strängar utförs karaktär för karaktär. Båda raderna börjar med samma karaktärer "Ivanov". Eftersom symbolen "A" i ordet "Andrey" kommer tidigare i alfabetet än symbolen "I" i ordet "Ivan", kommer denna rad att placeras tidigare.

Sortering i en SQL-fråga

För att utföra sortering måste du lägga till kommandot ORDER BY till frågesträngen. Efter detta kommando indikeras fältet som sorteringen utförs med.

Som exempel använder vi varubordsvarorna:

num
(Artikelnummer)
titel
(Namn)
pris
(pris)
1 Mandarin50
2 Vattenmelon120
3 En ananas80
4 Banan40

Uppgifterna här är redan sorterade efter kolumnen "num". Låt oss nu bygga en fråga som visar en tabell med produkter sorterade i alfabetisk ordning:

VÄLJ * FRÅN varor ORDER BY title

VÄLJ * FRÅN varor – anger att välja alla fält från godstabellen;

ORDER BY – sorteringskommando;

title – kolumnen som sorteringen kommer att utföras efter.

Resultatet av att utföra en sådan begäran är följande:

num titel pris
3 En ananas80
2 Vattenmelon120
4 Banan40
1 Mandarin50

Du kan också sortera efter något av tabellfälten.

Sorteringsriktning

Som standard sorteras kommandot ORDER BY i stigande ordning. För att styra sorteringsriktningen manuellt, följ kolumnnamnet med nyckelord ASC (stigande) eller DESC (fallande). För att visa vår tabell i fallande prisordning måste du därför ställa frågan så här:

VÄLJ * FRÅN varor BESTÄLLNING EFTER pris DESK

Sortera efter stigande pris blir:

VÄLJ * FRÅN varor BESTÄLLNING EFTER pris ASC

Sortering efter flera fält

SQL tillåter sortering efter flera fält samtidigt. För att göra detta, efter kommandot ORDER BY, indikeras de obligatoriska fälten separerade med kommatecken. Ordningen för frågeresultatet kommer att konfigureras i samma ordning som sorteringsfälten anges.

kolumn 1 kolumn 2 kolumn 3
3 1 c
1 3 c
2 2 b
2 1 b
1 2 a
1 3 a
3 4 a

Låt oss sortera tabellen enligt följande regler:

VÄLJ * FRÅN min tabell ORDER BY kolumn1 ASC, kolumn2 DESC, kolumn3 ASC

De där. den första kolumnen är stigande, den andra är fallande, den tredje är återigen stigande. Frågan kommer att ordna raderna efter den första kolumnen och sedan, utan att bryta mot den första regeln, efter den andra kolumnen. Då också, utan att bryta mot de befintliga reglerna, enligt den tredje. Resultatet blir en datauppsättning så här:

kolumn 1 kolumn 2 kolumn 3
1 3 a
1 3 c
1 2 a
2 2 b
2 1 b
3 1 a
3 1 c

Ordning av kommandot ORDER BY i en fråga

Sortering av rader utförs oftast tillsammans med ett villkor för val av data. Kommandot ORDER BY placeras efter valvillkoret WHERE. Till exempel väljer vi produkter med ett pris mindre än 100 rubel, sorterade efter namn i alfabetisk ordning:

VÄLJ *FRÅN varor VAR pris 100:- BESTÄLL EFTER pris ASC

I framtiden kan vi behöva sortera vårt urval - alfabetiskt för text eller stigande/fallande för numeriska värden. För sådana ändamål i SQL det finns en speciell operatör SORTERA EFTER .

1. Sortera vald data.

Låt oss sortera hela vår tabell efter mängden produktförsäljning, nämligen efter kolumnen Belopp.

VÄLJ * FRÅN Sumproduct BESTÄLLNING EFTER Mängd

Vi ser att frågan sorterade posterna i stigande ordning i fältet Belopp. Det är absolut nödvändigt att följa sekvensen av operatörer, dvs. operatör SORTERA EFTER ska gå i slutet av begäran. Annars får du ett felmeddelande.

Också en funktion hos operatören SORTERA EFTER är att den kan sortera data efter ett fält som vi inte valde i frågan, det vill säga att det räcker att det överhuvudtaget finns i databasen.

2. Sortering efter flera fält.

Låt oss nu sortera vårt exempel efter ytterligare ett fält. Låt det vara ett fält Stad, som visar platsen för försäljning av produkter.

VÄLJ * FRÅN Sumproduct BESTÄLLNING EFTER Belopp, ort

Sorteringsordningen kommer att bero på ordningen på fälten i begäran. Det vill säga, i vårt fall kommer data först att sorteras efter kolumn Belopp, och sedan av Stad.

3. Sorteringsriktning.

Även om standardoperatören SORTERA EFTER sorterar i stigande ordning, vi kan också ange sorteringsvärden i fallande ordning. För att göra detta sätter vi operatören i slutet av varje fält DESC (vilket är en förkortning för ordet NEDÅTGÅENDE).

VÄLJ * FRÅN Sumproduct BESTÄLLNING EFTER Belopp DESC , Ort

I i detta exempel, värde i fältet Belopp sorterades i fallande ordning och i fält Stad- Stigande. Operatör DESC gäller endast en kolumn, så vid behov ska den skrivas efter varje fält som deltar i sorteringen.


Nästa cykel:

Steg 8: Enkel sortering

Om resultatet av din SQL-fråga ska bli källmaterialet för en rapport, blir frågan om att sortera data i den extremt viktig, eftersom det är mycket svårt för en person som läser en rapport som inte är korrekt sorterad att snabbt hitta information de behöver. För att sortera data efter frågeresultatkolumner (i vårt fall efter tabellfält) använder SQL nyckelordet ORDER BY. Ett exempel på den enklaste sorteringen ges nedan. Grunden är hämtad från begäran från steg 2: "Begäran med ett enkelt urvalskriterium." Vi sorterar anställda efter fältet S_NAME (fullständigt namn).

VÄLJ S_NAME, S_EXPERIENCE FRÅN D_STAFF WHERE S_EXPERIENCE

Sortera resultatet av en SQL-fråga efter ett fält.

Steg 9. Komplex sortering

Det är ofta, och till och med nästan alltid, nödvändigt att sortera data efter mer än en kolumn och inte alltid i stigande ordning. SQL-syntax antar efter nyckelordet ORDER BY en lista med kolumner separerade med kommatecken, såväl som en sorteringsmetod för varje kolumn: i stigande ordning av värden - ASC eller i fallande ordning - DESC. I exemplet nedan visar vi poster för alla anställda i fallande ordning efter deras anställningstid. Vi sorterar anställda med samma tjänstgöringstid i alfabetisk ordning.

VÄLJ S_EXPERIENCE, S_NAME FRÅN D_STAFF BESTÄLLNING AV S_EXPERIENCE DESC, S_NAME ASC


Sortera resultatet av en SQL-fråga efter två fält.

Ganska ofta används den omvända sorteringsordningen med kolumner som [datum]. Om datumet lagrar till exempel datumet då informationen matades in, visas de poster som nyligen har lagts till i förhållande till resten vid omvänd sortering i början av listan. Om frågan hämtar nyhetsmeddelanden från databasen får vi en lista med meddelanden sorterade i fallande ordning efter deras relevans, vilket kan vara extremt användbart, eftersom meddelanden vanligtvis läses uppifrån och ner, och på nyhetssajter visas de inte alla , men bara ett fåtal de mest "fräscha".

Notera:
Alla artiklar i den aktuella SQL-handledningskategorin använder exempel och problem baserade på utbildningsbas data.

Enligt första normalformen relationsdatabaser data bör ordningen på raderna i tabellerna inte spela någon roll. Men i praktiken är det ofta nödvändigt att sortera information innan den visas på skärmen.

ORDER BY-satsen är ansvarig för att ordna raderna som laddas i SQL-frågan. Den finns i slutet av förfrågan:

VÄLJ<Перечень столбцов>FRÅN<Перечень таблиц>SORTERA EFTER<Условие сортировки>

Sorteringsvillkoret anger kolumnerna som de resulterande tabellraderna kommer att sorteras efter:

BESTÄLL EFTER kol1, kol2

Sorteringsordning i SQL

Det finns 2 sorteringsalternativ: stigande och fallande. För att ange sorteringstypen i frågan, efter kolumnnamnet, ange nyckelordet ASC (stigande) eller DESC (fallande), som bestämmer stigande respektive fallande ordning. Standardtypen är ASC:

ORDER BY col1 -- nästa sats kommer att motsvara ORDER BY col1 ACS

Det är också möjligt att ange en annan ordning för olika kolumner:

BESTÄLL EFTER col1 DESC, col2 ASC

För att konsolidera materialet, lös problemet på utbildningsdatabasen:

Du måste få en lista över anställds ID, sorterade efter grupp i stigande ordning och anställningsdatum, senaste till äldst.

SELECT id, Group, Hire_date FROM Anställda ORDER BY Group, Hire_date DESC

Låt oss slutföra syntaxen SELECT-sats med en ORDER BY-sats (en vertikal stapel betyder att du måste välja ett av alternativen):

VÄLJ [Tabellnamn.]Kolumnnamn[, [Tabellnamn.]Kolumnnamn2 ...] FRÅN [[Databasnamn.]Schemanamn.]Tabellnamn Kolumnnamn [, [Tabellnamn.]Kolumnnamn2 ...]]

  • Framåt >

Om materialet från office-menu.ru hjälpte dig, vänligen stödja projektet så att jag kan utveckla det ytterligare.

Vid hämtning av data kan det vara viktigt att få det i en viss ordnad form. Sortering kan göras efter alla fält med vilken datatyp som helst. Detta kan vara en stigande eller fallande sortering för numeriska fält. För tecken (text) fält kan detta sorteras i alfabetisk ordning, även om det i huvudsak också sorteras i stigande eller fallande ordning. Det kan också utföras i vilken riktning som helst - från A till Ö och vice versa från Ö till A.

Kärnan i sorteringsprocessen är att reducera sekvensen till en viss ordning. Du kan lära dig mer om sortering i artikeln "Sorteringsalgoritmer."

2, 4, 1, 5, 9

bör resultera i en ordnad sekvens:

1, 2, 4, 5, 6

På samma sätt, när du sorterar i stigande ordning av strängvärden:

Ivanov Ivan, Petrov Petr, Ivanov Andrey

resultatet bör bli:

Ivanov Andrey, Ivanov Ivan, Petrov Petrov

Här har raden "Andrey Ivanov" flyttat till början, eftersom jämförelsen av strängar utförs karaktär för karaktär. Båda raderna börjar med samma karaktärer "Ivanov". Eftersom symbolen "A" i ordet "Andrey" kommer tidigare i alfabetet än symbolen "I" i ordet "Ivan", kommer denna rad att placeras tidigare.

Sortering i en SQL-fråga

För att utföra sortering måste du lägga till kommandot ORDER BY till frågesträngen. Efter detta kommando indikeras fältet som sorteringen utförs med.

Som exempel använder vi varubordsvarorna:

num
(Artikelnummer)
titel
(Namn)
pris
(pris)
1 Mandarin50
2 Vattenmelon120
3 En ananas80
4 Banan40

Uppgifterna här är redan sorterade efter kolumnen "num". Låt oss nu bygga en fråga som visar en tabell med produkter sorterade i alfabetisk ordning:

VÄLJ * FRÅN varor ORDER BY title

VÄLJ * FRÅN varor – anger att välja alla fält från godstabellen;

ORDER BY – sorteringskommando;

title – kolumnen som sorteringen kommer att utföras efter.

Resultatet av att utföra en sådan begäran är följande:

num titel pris
3 En ananas80
2 Vattenmelon120
4 Banan40
1 Mandarin50

Du kan också sortera efter något av tabellfälten.

Sorteringsriktning

Som standard sorteras kommandot ORDER BY i stigande ordning. För att manuellt styra sorteringsriktningen, använd nyckelordet ASC (stigande) eller DESC (fallande) efter kolumnnamnet. För att visa vår tabell i fallande prisordning måste du därför ställa frågan så här:

VÄLJ * FRÅN varor BESTÄLLNING EFTER pris DESK

Sortera efter stigande pris blir:

VÄLJ * FRÅN varor BESTÄLLNING EFTER pris ASC

Sortering efter flera fält

SQL tillåter sortering efter flera fält samtidigt. För att göra detta, efter kommandot ORDER BY, indikeras de obligatoriska fälten separerade med kommatecken. Ordningen för frågeresultatet kommer att konfigureras i samma ordning som sorteringsfälten anges.

kolumn 1 kolumn 2 kolumn 3
3 1 c
1 3 c
2 2 b
2 1 b
1 2 a
1 3 a
3 4 a

Låt oss sortera tabellen enligt följande regler:

VÄLJ * FRÅN min tabell ORDER BY kolumn1 ASC, kolumn2 DESC, kolumn3 ASC

De där. den första kolumnen är stigande, den andra är fallande, den tredje är återigen stigande. Frågan kommer att ordna raderna efter den första kolumnen och sedan, utan att bryta mot den första regeln, efter den andra kolumnen. Då också, utan att bryta mot de befintliga reglerna, enligt den tredje. Resultatet blir en datauppsättning så här:

kolumn 1 kolumn 2 kolumn 3
1 3 a
1 3 c
1 2 a
2 2 b
2 1 b
3 1 a
3 1 c

Ordning av kommandot ORDER BY i en fråga

Sortering av rader utförs oftast tillsammans med ett villkor för val av data. Kommandot ORDER BY placeras efter valvillkoret WHERE. Till exempel väljer vi produkter med ett pris mindre än 100 rubel, sorterade efter namn i alfabetisk ordning:

VÄLJ *FRÅN varor VAR pris 100:- BESTÄLL EFTER pris ASC