Sorter etter syntaks. Sortering av data i SQL (ORDER BY). Sorter valgte data

Merk:
Alle artiklene i gjeldende SQL-opplæringskategori bruker eksempler og problemer basert på en opplæringsdatabase.

I følge den første normale formen for relasjonsdatabaser skal rekkefølgen på rader i tabeller ikke ha betydning. Men i praksis er det ofte nødvendig å sortere informasjon før den vises på skjermen.

ORDER BY-leddet er ansvarlig for å bestille radene som er lastet inn i SQL-spørringen. Den er plassert helt på slutten av forespørselen:

PLUKKE UT<Перечень столбцов>FRA<Перечень таблиц>REKKEFØLGE ETTER<Условие сортировки>

Sorteringsbetingelsen spesifiserer kolonnene som de resulterende tabellradene skal sorteres etter:

BESTILL ETTER col1, col2

Sorteringsrekkefølge i SQL

Det er 2 sorteringsalternativer: stigende og synkende. For å angi sorteringstypen i spørringen, etter kolonnenavnet, angi søkeord ASC (stigende) eller DESC (synkende), som definerer henholdsvis stigende eller synkende rekkefølge. Standardtypen er ASC:

ORDER BY col1 -- neste klausul vil tilsvare ORDER BY col1 ACS

Det er også mulig å spesifisere en annen rekkefølge for forskjellige kolonner:

BESTILL ETTER col1 DESC, col2 ASC

For å konsolidere materialet, løs problemet på utdanningsdatabasen:

Du må få en liste over medarbeider-ID-er, sortert etter gruppe i stigende rekkefølge og ansettelsesdato, nyeste til eldste.

SELECT id, Group, Hire_date FROM Employees ORDER BY Group, Hire_date DESC

La oss supplere syntaksen til SELECT-setningen med ORDER BY-leddet (den vertikale linjen betyr at ett av alternativene må velges):

VELG [Tabellnavn.]Kolonnenavn[, [Tabellnavn.]Kolonnenavn2 ...] FRA [[Databasenavn.]Skjemanavn.]Tabellnavn Kolonnenavn [, [Tabellnavn.]Kolonnenavn2 ...]]

  • Videresend >

Hvis materialet fra office-menu.ru hjalp deg, vennligst støtte prosjektet slik at jeg kan utvikle det videre.

ORDER BY-leddet i Access sorterer postene som returneres av en spørring i stigende eller synkende rekkefølge av verdiene til de angitte feltet(e).

Syntaks

PLUKKE UT Feltliste
FRA bord
HVOR utvalg_tilstand
[, felt2 ][, ...]]]

SELECT-setning som inneholder ORDER BY-klausulen inkluderer følgende elementer:

Notater

ORDER BY-klausulen er valgfri. Den bør brukes når du skal vise data i sortert form.

Standard sorteringsrekkefølge er stigende (A til Å, 0 til 9). De to eksemplene nedenfor viser sortering av ansattes navn etter etternavn.

VELG Etternavn, Fornavn
FRA ansatte
BESTILL ETTER Etternavn;
VELG Etternavn, Fornavn
FRA ansatte
BESTILL ETTER Etternavn ASC;

For å sortere i synkende rekkefølge (Z til A, 9 til 0), legg til det reserverte ordet DESC på slutten av hvert felt som du vil sortere postene etter. Eksemplet nedenfor sorterer ansattes navn i synkende rekkefølge etter lønn.

VELG Etternavn, Lønn
FRA ansatte
BESTILL ETTER lønn DESC, Etternavn;

Hvis du angir et felt som inneholder Memo-data eller OLE-objekter i ORDER BY-leddet, vil det oppstå en feil. DBMS-kjerne Microsoft Access støtter ikke sortering etter felt av denne typen.

ORDER BY-leddet er vanligvis det siste elementet i en SQL-setning.

Du kan inkludere flere felt i ORDER BY-klausulen. Postene sorteres først etter feltet som er spesifisert først i ORDER BY-klausulen. Poster med de samme første feltverdiene blir deretter sortert etter det andre feltet som er spesifisert, og så videre.

Ved innhenting av data kan det være viktig å få det i en bestemt ordnet form. Sortering kan gjøres etter alle felt med hvilken som helst datatype. Dette kan være en stigende eller synkende sortering for numeriske felt. For tegn (tekst) felt kan dette være sortering i alfabetisk rekkefølge, selv om det i hovedsak også er sortering i stigende eller synkende rekkefølge. Det kan også utføres i alle retninger - fra A til Å, og omvendt fra Å til A.

Essensen av sorteringsprosessen er å redusere sekvensen til en viss rekkefølge. Du kan lære mer om sortering i artikkelen "Sorteringsalgoritmer." For eksempel sortering av en vilkårlig tallsekvens i stigende rekkefølge:

2, 4, 1, 5, 9

skal resultere i en ordnet sekvens:

1, 2, 4, 5, 6

På samme måte, når du sorterer i stigende rekkefølge av strengverdier:

Ivanov Ivan, Petrov Petr, Ivanov Andrey

resultatet skal være:

Ivanov Andrey, Ivanov Ivan, Petrov Petrov

Her har linjen "Andrey Ivanov" flyttet til begynnelsen, siden sammenligningen av strenger utføres karakter for karakter. Begge linjene begynner med de samme karakterene "Ivanov". Siden symbolet "A" i ordet "Andrey" kommer tidligere i alfabetet enn symbolet "I" i ordet "Ivan", vil denne linjen bli plassert tidligere.

Sortering i en SQL-spørring

For å utføre sortering må du legge til ORDER BY-kommandoen til spørringsstrengen. Etter denne kommandoen vises feltet som sorteringen utføres med.

Som eksempler bruker vi varebordsvarer:

num
(Artikkelnummer)
tittel
(Navn)
pris
(pris)
1 Mandarin50
2 Vannmelon120
3 En ananas80
4 Banan40

Dataene her er allerede sortert etter "num"-kolonnen. La oss nå bygge en spørring som viser en tabell med produkter sortert i alfabetisk rekkefølge:

PLUKKE UT * FRA varer BESTILL etter tittel

VELG * FRA varer – spesifiserer å velge alle felt fra varetabellen;

ORDER BY – sorteringskommando;

tittel – kolonnen som sorteringen skal utføres etter.

Resultatet av å utføre en slik forespørsel er som følger:

num tittel pris
3 En ananas80
2 Vannmelon120
4 Banan40
1 Mandarin50

Du kan også sortere etter hvilket som helst av tabellfeltene.

Sorteringsretning

Som standard sorteres ORDER BY-kommandoen i stigende rekkefølge. For å kontrollere sorteringsretningen manuelt, bruk nøkkelordet ASC (stigende) eller DESC (synkende) etter kolonnenavnet. For å vise tabellen vår i synkende rekkefølge av priser, må du derfor stille spørsmålet slik:

PLUKKE UT * FRA varer BESTILLE ETTER pris DESK

Sorter etter stigende pris vil være:

PLUKKE UT * FRA varer BESTILLE ETTER pris ASC

Sortering etter flere felt

SQL tillater sortering etter flere felt samtidig. For å gjøre dette, etter ORDER BY-kommandoen, er de nødvendige feltene angitt atskilt med komma. Rekkefølgen på søkeresultatet vil bli konfigurert i samme rekkefølge som sorteringsfeltene er spesifisert.

kolonne 1 kolonne 2 kolonne 3
3 1 c
1 3 c
2 2 b
2 1 b
1 2 en
1 3 en
3 4 en

La oss sortere tabellen i henhold til følgende regler:

PLUKKE UT * FRA mytable ORDER BY column1 ASC, column2 DESC, column3 ASC

De. den første kolonnen er stigende, den andre er synkende, den tredje er igjen stigende. Spørringen vil sortere radene etter den første kolonnen, deretter, uten å bryte den første regelen, etter den andre kolonnen. Da, også, uten å bryte de eksisterende reglene, ifølge den tredje. Resultatet vil være et datasett som dette:

kolonne 1 kolonne 2 kolonne 3
1 3 en
1 3 c
1 2 en
2 2 b
2 1 b
3 1 en
3 1 c

Rekkefølgen av ORDER BY-kommandoen i en spørring

Sortering av rader utføres oftest sammen med en betingelse for valg av data. ORDER BY-kommandoen plasseres etter valgbetingelsen WHERE. For eksempel velger vi produkter med en pris mindre enn 100 rubler, sortert etter navn i alfabetisk rekkefølge:

PLUKKE UT * FRA varer HVOR pris 100,- BESTILL ETTER pris ASC

Ofte er det behov for å vise resultatet av en spørring i en bestemt rekkefølge, for eksempel alfabetisk. Til dette formålet har DBMS en spesiell funksjon i SQL-språk - sortering. I dette tilfellet kan programmereren velge hvilke felt og i hvilken rekkefølge det vil skje for å oppnå ønsket resultat, uten å bruke seriøse programmeringsferdigheter.

Hva er sortering i en database?

Arbeid med databaser er hele tiden forbundet med en stor mengde informasjon som må organiseres. For tiden finnes det en rekke DBMS-er med et bredt spekter av funksjoner, hvorav de mest populære er Oracle og MS SQL. Sortering av informasjon, som en av hovedprosedyrene i arbeid med databaser, leveres av en spesiell innebygd funksjon i hver av dem.

Rangeringsdata lar deg forenkle søkeprosessen, og hjelper i noen tilfeller med å løse visse problemer eller optimalisere driften av programmet. SQL-sortering utføres av et separat valgt felt, og om nødvendig, hvis det er identiske verdier i elementene i dette feltet, kan du spesifisere ytterligere parametere som bestemmer plasseringen av radene.

Sorter kommando

SQL-sortering i databasen er gitt ved å bruke ORDER BY-funksjonen. Så når du sender ut informasjon fra en database, etter å ha spesifisert kolonnene og tabellene som lesingen skal gjøres fra, må spørringen spesifisere en sorteringskommando, og deretter bestemme feltet eller feltene som sorteringen skal utføres med.

Hvis du for eksempel trenger å hente data fra Navn- og Alder-feltene fra Personer-tabellen, mens du viser resultatet i alfabetisk rekkefølge etter Navn-kolonnen, vil følgende spørring hjelpe: VELG Navn, Alder FRA personer BESTILL ETTER NAVN.

Hvordan sette sorteringsrekkefølgen?

Moderne forhold utgjør ulike oppgaver for programmerere, og noen ganger er det nødvendig å forhåndsbestemme i hvilken rekkefølge resultatet skal vises - i synkende eller stigende rekkefølge, i alfabetisk rekkefølge eller i omvendt rekkefølge? Og for å gjøre dette i SQL, bestemmes sorteringsrekkefølgen ved å legge til et nøkkelord i spørringen. Etter å ha valgt feltene og tabellene som ønsket informasjon skal hentes fra, må du legge til ORDER BY, og deretter angi navnet på kolonnen du vil sortere etter.

For å få omvendt rekkefølge, må du spesifisere DESC-parameteren etter navnet. Hvis det er nødvendig å bestille elementer i henhold til to eller flere kriterier, er kolonnene angitt atskilt med komma, og prioritet i rangering vil bli gitt til feltet som kommer først i listen. Det er verdt å merke seg at DESC-parameteren sørger for å ordne elementer i omvendt rekkefølge bare i ett felt, etter navnet som dette nøkkelordet er angitt, så om nødvendig må det spesifiseres i alle valgte kolonner.

Alternative sorteringsmetoder

Hvis det ikke er mulig å bruke den innebygde SQL-sorteringsfunksjonen, kan du skrive en av de velkjente algoritmene. Hvis du trenger å oppnå den raskeste rekkefølgen av elementer, bør du bruke en metode basert på å dele matrisen av elementer i to. Også veldig populære er "boble" rangeringsmetoder, der to naboelementer bytte plass ved feil plassering, "pyramide sortering", som sender det største elementet til slutten av listen, og "innsettingssort", som forhåndsbestemmer plasseringen av hvert element etter tur.

Å skrive en algoritme selv vil ikke øke sorteringshastigheten betydelig, men det vil bidra til utvikling av programmeringsferdigheter, og vil også tillate deg å endre prosessen ved å justere rangeringsskjemaet til en spesifikk database for å forbedre effektiviteten til programmet.

I fremtiden må vi kanskje sortere utvalget vårt – alfabetisk for tekst eller stigende/synkende for numeriske verdier. For slike formål i SQL Det er spesiell operatør REKKEFØLGE ETTER .

1. Sortering av de valgte dataene.

La oss sortere hele tabellen etter mengden produktsalg, nemlig etter kolonnen Beløp.

PLUKKE UT * FRA Sumprodukt BESTILLE ETTER Beløp

Vi ser at spørringen sorterte postene i stigende rekkefølge i feltet Beløp. Det er viktig å følge sekvensen av operatører, dvs. operatør REKKEFØLGE ETTER skal gå helt på slutten av forespørselen. Ellers får du en feilmelding.

Også en funksjon for operatøren REKKEFØLGE ETTER er at den kan sortere data etter et felt som vi ikke valgte i spørringen, det vil si at det er nok at det i det hele tatt er i databasen.

2. Sortering etter flere felt.

La oss nå sortere eksemplet vårt i tillegg etter ett felt til. La det være et felt By, som viser salgsstedet for produktene.

PLUKKE UT * FRA Sumprodukt BESTILLE ETTER Beløp, By

Sorteringsrekkefølgen vil avhenge av rekkefølgen på feltene i forespørselen. Det vil si, i vårt tilfelle vil først dataene bli sortert etter kolonne Beløp, og deretter ved By.

3. Sorteringsretning.

Selv om standardoperatøren REKKEFØLGE ETTER sorterer i stigende rekkefølge, kan vi også spesifisere sorteringsverdier i synkende rekkefølge. For å gjøre dette, på slutten av hvert felt setter vi operatøren DESC (som er en forkortelse for ordet FALDENDE).

PLUKKE UT * FRA Sumprodukt BESTILLE ETTER Beløp DESC , By

I i dette eksemplet, verdi i feltet Beløp ble sortert i synkende rekkefølge, og i felten By- Stigende. Operatør DESC gjelder kun én kolonne, så om nødvendig må det skrives etter hvert felt som deltar i sorteringen.