Sammanfattning :i denna handledning lär du dig hur du sorterar en resultatuppsättning av en fråga med SQLite ORDER BY
klausul.
Introduktion till SQLite ORDER BY
klausul
SQLite lagrar data i tabellerna i en ospecificerad ordning. Det betyder att raderna i tabellen kan vara i den ordning som de infogades eller inte.
Om du använder SELECT
sats för att fråga data från en tabell, ordningen på raderna i resultatuppsättningen är ospecificerad.
För att sortera resultatuppsättningen lägger du till ORDER BY
sats till SELECT
uttalande enligt följande:
SELECT
select_list
FROM
table
ORDER BY
column_1 ASC,
column_2 DESC;
Code language: SQL (Structured Query Language) (sql)
ORDER BY
satsen kommer efter FROM
klausul. Det låter dig sortera resultatuppsättningen baserat på en eller flera kolumner i stigande eller fallande ordning.
I den här syntaxen placerar du kolumnnamnet som du vill sortera efter ORDER BY
sats följt av ASC
eller DESC
nyckelord.
ASC
nyckelord betyder stigande.- Och
DESC
nyckelord betyder fallande.
Om du inte anger ASC
eller DESC
nyckelord, sorterar SQLite resultatuppsättningen med ASC
alternativ. Med andra ord, den sorterar resultatet som standard i stigande ordning.
Om du vill sortera resultatuppsättningen efter flera kolumner, använder du ett kommatecken (,) för att separera två kolumner. ORDER BY
sats sorterar rader med hjälp av kolumner eller uttryck från vänster till höger. Med andra ord, ORDER BY
satsen sorterar raderna med den första kolumnen i listan. Sedan sorterar den de sorterade raderna med den andra kolumnen och så vidare.
Du kan sortera resultatuppsättningen med en kolumn som inte visas i urvalslistan för SELECT
klausul.
SQLite ORDER BY
klausulexempel
Låt oss ta tracks
tabell i exempeldatabasen för demonstrationen.
Anta att du vill hämta data från kolumner för namn, millisekunder och album-id, använder du följande sats:
SELECT
name,
milliseconds,
albumid
FROM
tracks;
Code language: SQL (Structured Query Language) (sql)
Prova det
SELECT
uttalande som inte använder ORDER BY
klausul returnerar en resultatuppsättning som inte är i någon ordning.
Anta att du vill sortera resultatuppsättningen baserat på AlbumId
kolumnen i stigande ordning använder du följande sats:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC;
Code language: SQL (Structured Query Language) (sql)
Prova det
Resultatuppsättningen är nu sorterad efter AlbumId
kolumn i stigande ordning som visas på skärmdumpen.
SQLite använder ASC
som standard så att du kan utelämna det i ovanstående uttalande enligt följande:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid;
Prova det
Anta att du vill sortera det sorterade resultatet (efter AlbumId
) ovan med Milliseconds
kolumn i fallande ordning. I det här fallet måste du lägga till Milliseconds
kolumnen till ORDER BY
klausul enligt följande:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC,
milliseconds DESC;
Code language: SQL (Structured Query Language) (sql)
Prova det
SQLite sorterar rader efter AlbumId
kolumnen i stigande ordning först. Sedan sorterar den det sorterade resultatet efter Milliseconds
kolumn i fallande ordning.
Om du tittar på låtarna i albumet med AlbumId
1, upptäcker du att ordningen på spåren ändras mellan de två påståendena.
SQLite ORDER BY
med kolumnpositionen
Istället för att ange namnen på kolumner kan du använda kolumnens position i ORDER BY
klausul.
Till exempel sorterar följande påstående spåren efter båda albumid
(3:e kolumnen) och milliseconds
(2:a kolumnen) i stigande ordning.
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
3,2;
Code language: SQL (Structured Query Language) (sql)
Prova det
Siffran 3 och 2 hänvisar till AlbumId
och Milliseconds
i kolumnlistan som visas i SELECT
klausul.
Sortera NULL
I databasvärlden är NULL speciell. Det anger att informationen saknas eller att uppgifterna inte är tillämpliga.
Anta att du vill lagra en artists födelsedag i ett bord. När du sparar artistens rekord har du inte födelsedagsinformationen.
För att representera den okända födelsedagsinformationen i databasen kan du använda ett speciellt datum som 01.01.1900
eller en ''
tom sträng. Båda dessa värden visar dock inte tydligt att födelsedagen är okänd.
NULL uppfanns för att lösa detta problem. Istället för att använda ett speciellt värde för att indikera att informationen saknas, används NULL.
NULL är speciellt eftersom du inte kan jämföra det med ett annat värde. Enkelt uttryckt, om de två informationsbitarna är okända kan du inte jämföra dem.
NULL kan inte ens jämföras med sig själv; NULL är inte lika med sig själv så NULL = NULL
resulterar alltid i falskt.
När det gäller sortering anser SQLite att NULL är mindre än något annat värde.
Det betyder att NULL visas i början av resultatuppsättningen om du använder ASC eller i slutet av resultatuppsättningen när du använder DESC.
SQLite 3.30.0 lade till NULLS FIRST
och NULLS LAST
alternativ till ORDER BY
klausul. NULLS FIRST
alternativet anger att NULLs kommer att visas i början av resultatuppsättningen medan NULLS LAST
alternativet placera NULLs i slutet av resultatuppsättningen.
Följande exempel använder ORDER BY
klausul för att sortera spår efter kompositörer:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer;
Code language: SQL (Structured Query Language) (sql)
Först ser du att NULL visas i början av resultatuppsättningen eftersom SQLite behandlar dem som de lägsta värdena. När du rullar nedåt i resultatet ser du andra värden:
Följande exempel använder NULLS LAST
alternativ för att placera NULL efter andra värden:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer NULLS LAST;
Code language: SQL (Structured Query Language) (sql)
Om du bläddrar nedåt i utgången ser du att NULLs placeras i slutet av resultatuppsättningen:
I den här handledningen har du lärt dig hur du använder SQLite ORDER BY
sats för att sortera resultatuppsättningen med en enda kolumn, flera kolumner i stigande och fallande ordning.