sql >> Databáze >  >> RDS >> SQLite

SQLite Order By

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í.


  1. DOUBLE vs DECIMAL v MySQL

  2. Jak používat LIKE v SQL

  3. Jednoduché nastavení replikace Slony-I.

  4. Jak vytvořit Snapshot Replication