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.
ASC
klíčové slovo znamená vzestupně.- A
DESC
klíč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í.