Shrnutí :v tomto tutoriálu se naučíte, jak třídit sadu výsledků dotazu pomocí SQLite ORDER BY doložka.
Úvod do SQLite ORDER BY klauzule
SQLite ukládá data do tabulek v blíže nespecifikovaném pořadí. To znamená, že řádky v tabulce mohou nebo nemusí být v pořadí, v jakém byly vloženy.
Pokud použijete SELECT příkaz k dotazu na data z tabulky, pořadí řádků v sadě výsledků není specifikováno.
Chcete-li seřadit sadu výsledků, přidejte ORDER BY klauzule do SELECT prohlášení takto:
SELECT
select_list
FROM
table
ORDER BY
column_1 ASC,
column_2 DESC;Code language: SQL (Structured Query Language) (sql)
ORDER BY klauzule následuje za FROM doložka. Umožňuje seřadit sadu výsledků na základě jednoho nebo více sloupců ve vzestupném nebo sestupném pořadí.
V této syntaxi umístíte název sloupce, podle kterého chcete třídit, za ORDER BY klauzule následovaná znakem ASC nebo DESC klíčové slovo.
ASCklíčové slovo znamená vzestupně.- A
DESCklíčové slovo znamená sestupně.
Pokud neurčíte ASC nebo DESC klíčové slovo SQLite třídí sadu výsledků pomocí ASC volba. Jinými slovy, ve výchozím nastavení seřadí sadu výsledků ve vzestupném pořadí.
V případě, že chcete sadu výsledků seřadit podle více sloupců, oddělte dva sloupce čárkou (,). ORDER BY klauzule třídí řádky pomocí sloupců nebo výrazů zleva doprava. Jinými slovy, ORDER BY klauzule seřadí řádky pomocí prvního sloupce v seznamu. Potom setřídí seřazené řádky pomocí druhého sloupce a tak dále.
Sadu výsledků můžete seřadit pomocí sloupce, který se neobjevuje ve výběrovém seznamu SELECT doložka.
SQLite ORDER BY příklad klauzule
Vezměme si tracks tabulky ve vzorové databázi pro ukázku.
Předpokládejme, že chcete získat data ze sloupců název, milisekundy a ID alba, použijete následující příkaz:
SELECT
name,
milliseconds,
albumid
FROM
tracks;Code language: SQL (Structured Query Language) (sql) Zkuste to
SELECT příkaz, který nepoužívá ORDER BY klauzule vrací sadu výsledků, která není v žádném pořadí.
Předpokládejme, že chcete seřadit sadu výsledků podle AlbumId ve vzestupném pořadí, použijete následující příkaz:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC;Code language: SQL (Structured Query Language) (sql) Zkuste to
Sada výsledků je nyní tříděna podle AlbumId sloupec ve vzestupném pořadí, jak je znázorněno na snímku obrazovky.
SQLite používá ASC ve výchozím nastavení jej můžete ve výše uvedeném příkazu vynechat takto:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid; Zkuste to
Předpokládejme, že chcete seřazený výsledek seřadit (podle AlbumId ) výše o Milliseconds sloupec v sestupném pořadí. V tomto případě musíte přidat Milliseconds do sloupce ORDER BY doložka takto:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC,
milliseconds DESC;Code language: SQL (Structured Query Language) (sql) Zkuste to
SQLite řadí řádky podle AlbumId sloupec ve vzestupném pořadí jako první. Potom seřazenou sadu výsledků seřadí podle Milliseconds sloupec v sestupném pořadí.
Pokud se podíváte na skladby alba pomocí AlbumId 1, zjistíte, že se pořadí skladeb mezi těmito dvěma příkazy mění.
SQLite ORDER BY s pozicí sloupce
Místo zadávání názvů sloupců můžete použít pozici sloupce v ORDER BY doložka.
Například následující příkaz seřadí skladby podle obou albumid (3. sloupec) a Milliseconds (2. sloupec) ve vzestupném pořadí.
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
3,2;Code language: SQL (Structured Query Language) (sql) Zkuste to
Čísla 3 a 2 odkazují na AlbumId a Milliseconds v seznamu sloupců, který se objeví v SELECT doložka.
Řazení hodnot NULL
Ve světě databází je NULL speciální. Znamená, že informace chybí nebo že data nejsou použitelná.
Předpokládejme, že chcete uložit narozeniny umělce do tabulky. V době ukládání záznamu interpreta nemáte informace o narozeninách.
Pro znázornění neznámých informací o narozeninách v databázi můžete použít speciální datum jako 01.01.1900 nebo '' prázdný řetězec. Obě tyto hodnoty však jasně neukazují, že datum narození není známo.
K vyřešení tohoto problému byla vynalezena NULL. Místo použití speciální hodnoty k označení chybějící informace se použije NULL.
NULL je speciální, protože ji nelze porovnat s jinou hodnotou. Jednoduše řečeno, pokud jsou tyto dvě informace neznámé, nemůžete je porovnávat.
NULL je dokonce nelze srovnávat sama se sebou; NULL se nerovná sama sobě, takže NULL = NULL vždy vede k false.
Pokud jde o řazení, SQLite považuje NULL za menší než jakoukoli jinou hodnotu.
Znamená to, že hodnoty NULL se objeví na začátku sady výsledků, pokud použijete ASC, nebo na konci sady výsledků, když použijete DESC.
SQLite 3.30.0 přidal NULLS FIRST a NULLS LAST možnosti ORDER BY doložka. NULLS FIRST volba určuje, že hodnoty NULL se objeví na začátku sady výsledků, zatímco NULLS LAST možnost umístit NULL na konec sady výsledků.
Následující příklad používá ORDER BY klauzule pro řazení skladeb podle skladatelů:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer;Code language: SQL (Structured Query Language) (sql) Za prvé, vidíte, že NULL se objevují na začátku sady výsledků, protože SQLite je považuje za nejnižší hodnoty. Když posunete výsledek dolů, uvidíte další hodnoty:
Následující příklad používá NULLS LAST možnost umístit hodnoty NULL za jiné hodnoty:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer NULLS LAST;Code language: SQL (Structured Query Language) (sql) Pokud posunete výstup dolů, uvidíte, že hodnoty NULL jsou umístěny na konci sady výsledků:
V tomto tutoriálu jste se naučili používat SQLite ORDER BY klauzule k řazení sady výsledků pomocí jednoho sloupce, více sloupců ve vzestupném a sestupném pořadí.