Samenvatting :in deze tutorial leer je hoe je een resultatenset van een query sorteert met SQLite ORDER BY
clausule.
Inleiding tot SQLite ORDER BY
clausule
SQLite slaat gegevens in de tabellen op in een niet-gespecificeerde volgorde. Het betekent dat de rijen in de tabel al dan niet in de volgorde staan waarin ze zijn ingevoegd.
Als u de SELECT
. gebruikt statement om gegevens uit een tabel op te vragen, is de volgorde van de rijen in de resultatenset niet gespecificeerd.
Om de resultatenset te sorteren, voegt u de ORDER BY
. toe clausule aan de SELECT
verklaring als volgt:
SELECT
select_list
FROM
table
ORDER BY
column_1 ASC,
column_2 DESC;
Code language: SQL (Structured Query Language) (sql)
De ORDER BY
clausule komt na de FROM
clausule. Hiermee kunt u de resultatenset sorteren op basis van een of meer kolommen in oplopende of aflopende volgorde.
In deze syntaxis plaatst u de kolomnaam waarop u wilt sorteren na de ORDER BY
clausule gevolgd door de ASC
of DESC
zoekwoord.
- De
ASC
trefwoord betekent oplopend. - En de
DESC
trefwoord betekent aflopend.
Als u de ASC
. niet opgeeft of DESC
trefwoord, sorteert SQLite de resultatenset met behulp van de ASC
optie. Met andere woorden, het sorteert de resultatenset standaard in oplopende volgorde.
Als u de resultatenset op meerdere kolommen wilt sorteren, gebruikt u een komma (,) om twee kolommen te scheiden. De ORDER BY
clausule sorteert rijen met behulp van kolommen of uitdrukkingen van links naar rechts. Met andere woorden, de ORDER BY
clausule sorteert de rijen met behulp van de eerste kolom in de lijst. Vervolgens sorteert het de gesorteerde rijen met behulp van de tweede kolom, enzovoort.
U kunt de resultatenset sorteren met behulp van een kolom die niet voorkomt in de selectielijst van de SELECT
clausule.
SQLite ORDER BY
clausule voorbeeld
Laten we de tracks
nemen tabel in de voorbeelddatabase voor de demonstratie.
Stel dat u gegevens wilt ophalen uit naam, milliseconden en album-ID-kolommen, dan gebruikt u de volgende instructie:
SELECT
name,
milliseconds,
albumid
FROM
tracks;
Code language: SQL (Structured Query Language) (sql)
Probeer het
De SELECT
statement dat geen gebruik maakt van ORDER BY
clausule geeft een resultaatset terug die niet in een willekeurige volgorde staat.
Stel dat u de resultatenset wilt sorteren op basis van AlbumId
kolom in oplopende volgorde gebruikt, gebruikt u de volgende verklaring:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC;
Code language: SQL (Structured Query Language) (sql)
Probeer het
De resultatenset wordt nu gesorteerd op AlbumId
kolom in oplopende volgorde zoals weergegeven in de schermafbeelding.
SQLite gebruikt ASC
standaard, zodat u het als volgt in de bovenstaande verklaring kunt weglaten:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid;
Probeer het
Stel dat u het gesorteerde resultaat wilt sorteren (op AlbumId
) hierboven met de Milliseconds
kolom in aflopende volgorde. In dit geval moet u de Milliseconds
. toevoegen kolom naar de ORDER BY
clausule als volgt:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC,
milliseconds DESC;
Code language: SQL (Structured Query Language) (sql)
Probeer het
SQLite sorteert rijen op AlbumId
kolom eerst in oplopende volgorde. Vervolgens sorteert het het gesorteerde resultaat ingesteld op Milliseconds
kolom in aflopende volgorde.
Als je de nummers van het album bekijkt met AlbumId
1, vindt u dat de volgorde van de sporen verandert tussen de twee uitspraken.
SQLite ORDER BY
met de kolompositie
In plaats van de namen van kolommen op te geven, kunt u de positie van de kolom gebruiken in de ORDER BY
clausule.
De volgende instructie sorteert de tracks bijvoorbeeld op zowel albumid
(3e kolom) en milliseconds
(2e kolom) in oplopende volgorde.
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
3,2;
Code language: SQL (Structured Query Language) (sql)
Probeer het
De cijfers 3 en 2 verwijzen naar de AlbumId
en Milliseconds
in de kolomlijst die verschijnt in de SELECT
clausule.
NULL'S sorteren
In de databasewereld is NULL bijzonder. Het geeft aan dat de informatie ontbreekt of de gegevens niet van toepassing zijn.
Stel, je wilt de verjaardag van een artiest in een tabel bewaren. Op het moment dat u het record van de artiest opslaat, beschikt u niet over de verjaardagsgegevens.
Om de onbekende verjaardagsinformatie in de database weer te geven, kunt u een speciale datum gebruiken, zoals 01.01.1900
of een ''
lege string. Beide waarden laten echter niet duidelijk zien dat de verjaardag onbekend is.
NULL is uitgevonden om dit probleem op te lossen. In plaats van een speciale waarde te gebruiken om aan te geven dat de informatie ontbreekt, wordt NULL gebruikt.
NULL is bijzonder omdat je het niet kunt vergelijken met een andere waarde. Simpel gezegd, als de twee stukjes informatie onbekend zijn, kun je ze niet vergelijken.
NULL is zelfs niet met zichzelf te vergelijken; NULL is niet gelijk aan zichzelf, dus NULL = NULL
resulteert altijd in false.
Als het op sorteren aankomt, beschouwt SQLite NULL als kleiner dan elke andere waarde.
Dit betekent dat NULL's aan het begin van de resultatenset verschijnen als u ASC gebruikt of aan het einde van de resultatenset wanneer u DESC gebruikt.
SQLite 3.30.0 heeft de NULLS FIRST
. toegevoegd en NULLS LAST
opties voor de ORDER BY
clausule. De NULLS FIRST
optie specificeert dat de NULL's aan het begin van de resultatenset verschijnen terwijl de NULLS LAST
optie plaats NULL's aan het einde van de resultatenset.
Het volgende voorbeeld gebruikt de ORDER BY
clausule om tracks te sorteren op componisten:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer;
Code language: SQL (Structured Query Language) (sql)
Ten eerste zie je dat NULL's aan het begin van de resultatenset verschijnen omdat SQLite ze als de laagste waarden behandelt. Als u door het resultaat naar beneden scrolt, ziet u andere waarden:
Het volgende voorbeeld gebruikt de NULLS LAST
optie om NULL's achter andere waarden te plaatsen:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer NULLS LAST;
Code language: SQL (Structured Query Language) (sql)
Als u door de uitvoer naar beneden scrolt, ziet u dat NULL's aan het einde van de resultatenset worden geplaatst:
In deze tutorial heb je geleerd hoe je de SQLite ORDER BY
. gebruikt clausule om de resultatenset te sorteren met een enkele kolom, meerdere kolommen in oplopende en aflopende volgorde.