Oversigt :i denne øvelse lærer du, hvordan du sorterer et resultatsæt af en forespørgsel ved hjælp af SQLite ORDER BY klausul.
Introduktion til SQLite ORDER BY klausul
SQLite gemmer data i tabellerne i en uspecificeret rækkefølge. Det betyder, at rækkerne i tabellen muligvis er i den rækkefølge, som de blev indsat.
Hvis du bruger SELECT sætning for at forespørge data fra en tabel, rækkefølgen af rækker i resultatsættet er uspecificeret.
For at sortere resultatsættet tilføjer du ORDER BY klausul til SELECT erklæring som følger:
SELECT
select_list
FROM
table
ORDER BY
column_1 ASC,
column_2 DESC;Code language: SQL (Structured Query Language) (sql)
ORDER BY klausulen kommer efter FROM klausul. Det giver dig mulighed for at sortere resultatsættet baseret på en eller flere kolonner i stigende eller faldende rækkefølge.
I denne syntaks placerer du kolonnenavnet, som du vil sortere efter ORDER BY klausul efterfulgt af ASC eller DESC søgeord.
ASCsøgeord betyder stigende.- Og
DESCsøgeord betyder faldende.
Hvis du ikke angiver ASC eller DESC søgeord, sorterer SQLite resultatsættet ved hjælp af ASC mulighed. Med andre ord sorterer den som standard resultatsættet i stigende rækkefølge.
Hvis du vil sortere resultatsættet efter flere kolonner, bruger du et komma (,) til at adskille to kolonner. ORDER BY klausul sorterer rækker ved hjælp af kolonner eller udtryk fra venstre mod højre. Med andre ord, ORDER BY klausul sorterer rækkerne ved hjælp af den første kolonne på listen. Derefter sorterer den de sorterede rækker ved hjælp af den anden kolonne, og så videre.
Du kan sortere resultatsættet ved hjælp af en kolonne, der ikke vises i udvalgslisten for SELECT klausul.
SQLite ORDER BY klausuleksempel
Lad os tage tracks tabel i eksempeldatabasen til demonstrationen.
Antag, at du vil hente data fra kolonner med navn, millisekunder og album-id, så bruger du følgende sætning:
SELECT
name,
milliseconds,
albumid
FROM
tracks;Code language: SQL (Structured Query Language) (sql) Prøv det
SELECT sætning, der ikke bruger ORDER BY klausul returnerer et resultatsæt, der ikke er i nogen rækkefølge.
Antag, at du vil sortere resultatsættet baseret på AlbumId kolonne i stigende rækkefølge, bruger du følgende sætning:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC;Code language: SQL (Structured Query Language) (sql) Prøv det
Resultatsættet er nu sorteret efter AlbumId kolonne i stigende rækkefølge som vist på skærmbilledet.
SQLite bruger ASC som standard, så du kan udelade det i ovenstående erklæring som følger:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid; Prøv det
Antag, at du vil sortere det sorterede resultat (efter AlbumId ) ovenfor med Milliseconds kolonne i faldende rækkefølge. I dette tilfælde skal du tilføje Milliseconds kolonnen til ORDER BY klausul som følger:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC,
milliseconds DESC;Code language: SQL (Structured Query Language) (sql) Prøv det
SQLite sorterer rækker efter AlbumId kolonne i stigende rækkefølge først. Derefter sorterer den det sorterede resultat indstillet efter Milliseconds kolonne i faldende rækkefølge.
Hvis du ser på numrene på albummet med AlbumId 1, opdager du, at rækkefølgen af spor skifter mellem de to udsagn.
SQLite ORDER BY med kolonnepositionen
I stedet for at angive navnene på kolonner, kan du bruge kolonnens placering i ORDER BY klausul.
For eksempel sorterer følgende sætning sporene efter både albumid (3. kolonne) og milliseconds (2. kolonne) i stigende rækkefølge.
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
3,2;Code language: SQL (Structured Query Language) (sql) Prøv det
Tallet 3 og 2 refererer til AlbumId og Milliseconds i kolonnelisten, der vises i SELECT klausul.
Sortering af NULL'er
I databaseverdenen er NULL speciel. Det angiver, at oplysningerne mangler, eller at dataene ikke er gældende.
Antag, at du vil gemme en kunstners fødselsdag i et bord. På det tidspunkt, hvor du gemmer kunstnerens rekord, har du ikke fødselsdagsoplysningerne.
For at repræsentere de ukendte fødselsdagsoplysninger i databasen kan du bruge en særlig dato som f.eks. 01.01.1900 eller en '' tom streng. Begge disse værdier viser dog ikke tydeligt, at fødselsdagen er ukendt.
NULL blev opfundet for at løse dette problem. I stedet for at bruge en speciel værdi til at angive, at informationen mangler, bruges NULL.
NULL er speciel, fordi du ikke kan sammenligne den med en anden værdi. Kort sagt, hvis de to oplysninger er ukendte, kan du ikke sammenligne dem.
NULL kan endda ikke sammenlignes med sig selv; NULL er ikke lig med sig selv, så NULL = NULL resulterer altid i falsk.
Når det kommer til sortering, anser SQLite NULL for at være mindre end nogen anden værdi.
Det betyder, at NULL'er vises i begyndelsen af resultatsættet, hvis du bruger ASC eller i slutningen af resultatsættet, når du bruger DESC.
SQLite 3.30.0 tilføjede NULLS FIRST og NULLS LAST muligheder til ORDER BY klausul. NULLS FIRST option angiver, at NULL'erne vises i begyndelsen af resultatsættet, mens NULLS LAST option placer NULLs i slutningen af resultatsættet.
Følgende eksempel bruger ORDER BY klausul for at sortere numre efter komponister:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer;Code language: SQL (Structured Query Language) (sql) Først ser du, at NULL'er vises i begyndelsen af resultatsættet, fordi SQLite behandler dem som de laveste værdier. Når du ruller ned i resultatet, vil du se andre værdier:
Følgende eksempel bruger NULLS LAST mulighed for at placere NULL efter andre værdier:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer NULLS LAST;Code language: SQL (Structured Query Language) (sql) Hvis du ruller ned i outputtet, vil du se, at NULL er placeret i slutningen af resultatsættet:
I denne øvelse har du lært, hvordan du bruger SQLite ORDER BY klausul for at sortere resultatsættet ved hjælp af en enkelt kolonne, flere kolonner i stigende og faldende rækkefølge.