Podsumowanie :w tym samouczku dowiesz się, jak sortować zestaw wyników zapytania przy użyciu SQLite ORDER BY
klauzula.
Wprowadzenie do SQLite ORDER BY
klauzula
SQLite przechowuje dane w tabelach w nieokreślonej kolejności. Oznacza to, że wiersze w tabeli mogą, ale nie muszą być w kolejności, w jakiej zostały wstawione.
Jeśli używasz SELECT
do zapytania o dane z tabeli, kolejność wierszy w zestawie wyników jest nieokreślona.
Aby posortować zestaw wyników, dodaj ORDER BY
klauzula SELECT
oświadczenie w następujący sposób:
SELECT
select_list
FROM
table
ORDER BY
column_1 ASC,
column_2 DESC;
Code language: SQL (Structured Query Language) (sql)
ORDER BY
klauzula występuje po FROM
klauzula. Pozwala posortować zestaw wyników na podstawie jednej lub więcej kolumn w kolejności rosnącej lub malejącej.
W tej składni umieszczasz nazwę kolumny, według której chcesz sortować po ORDER BY
klauzula, po której następuje ASC
lub DESC
słowo kluczowe.
ASC
słowo kluczowe oznacza rosnąco.- I
DESC
słowo kluczowe oznacza malejąco.
Jeśli nie określisz ASC
lub DESC
słowo kluczowe, SQLite sortuje zestaw wyników za pomocą ASC
opcja. Innymi słowy, domyślnie sortuje zestaw wyników w kolejności rosnącej.
Jeśli chcesz posortować zestaw wyników według wielu kolumn, użyj przecinka (,), aby oddzielić dwie kolumny. ORDER BY
klauzula sortuje wiersze za pomocą kolumn lub wyrażeń od lewej do prawej. Innymi słowy, ORDER BY
klauzula sortuje wiersze przy użyciu pierwszej kolumny na liście. Następnie sortuje posortowane wiersze przy użyciu drugiej kolumny itd.
Zestaw wyników można posortować za pomocą kolumny, która nie pojawia się na liście wyboru SELECT
klauzula.
SQLite ORDER BY
przykład klauzuli
Weźmy tracks
tabeli w przykładowej bazie danych do demonstracji.
Załóżmy, że chcesz uzyskać dane z kolumn nazwa, milisekundy i identyfikator albumu, użyj następującej instrukcji:
SELECT
name,
milliseconds,
albumid
FROM
tracks;
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
SELECT
instrukcja, która nie używa ORDER BY
klauzula zwraca zestaw wyników, który nie jest w żadnej kolejności.
Załóżmy, że chcesz posortować zestaw wyników na podstawie AlbumId
kolumna w porządku rosnącym, użyj następującego stwierdzenia:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC;
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
Zestaw wyników jest teraz posortowany według AlbumId
kolumna w kolejności rosnącej, jak pokazano na zrzucie ekranu.
SQLite używa ASC
domyślnie, więc możesz go pominąć w powyższym oświadczeniu w następujący sposób:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid;
Wypróbuj
Załóżmy, że chcesz posortować posortowane wyniki (według AlbumId
) powyżej o Milliseconds
kolumna w porządku malejącym. W takim przypadku musisz dodać Milliseconds
kolumnę do ORDER BY
klauzula w następujący sposób:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC,
milliseconds DESC;
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
SQLite sortuje wiersze według AlbumId
kolumna w kolejności rosnącej jako pierwsza. Następnie sortuje posortowane wyniki ustawione według Milliseconds
kolumna w kolejności malejącej.
Jeśli spojrzysz na utwory z albumu z AlbumId
1, okazuje się, że kolejność utworów zmienia się między tymi dwoma stwierdzeniami.
SQLite ORDER BY
z pozycją kolumny
Zamiast określać nazwy kolumn, możesz użyć pozycji kolumny w ORDER BY
klauzula.
Na przykład poniższa instrukcja sortuje utwory według obu albumid
(3. kolumna) i milliseconds
(2. kolumna) w porządku rosnącym.
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
3,2;
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
Cyfry 3 i 2 odnoszą się do AlbumId
i Milliseconds
na liście kolumn, która pojawia się w SELECT
klauzula.
Sortowanie wartości NULL
W świecie baz danych NULL jest wyjątkowy. Oznacza to, że brakujące informacje lub dane nie mają zastosowania.
Załóżmy, że chcesz zapisać datę urodzin artysty w tabeli. W momencie zapisywania danych artysty nie masz informacji o urodzinach.
Aby przedstawić nieznane informacje o urodzinach w bazie danych, możesz użyć specjalnej daty, takiej jak 01.01.1900
lub ''
pusta struna. Jednak obie te wartości nie wskazują wyraźnie, że data urodzin jest nieznana.
NULL został wynaleziony, aby rozwiązać ten problem. Zamiast używania specjalnej wartości wskazującej, że brakuje informacji, używana jest wartość NULL.
NULL jest wyjątkowy, ponieważ nie można go porównać z inną wartością. Mówiąc najprościej, jeśli te dwie informacje są nieznane, nie można ich porównać.
NULL jest nawet nieporównywalny z samym sobą; NULL nie jest równy sobie, więc NULL = NULL
zawsze skutkuje fałszem.
Jeśli chodzi o sortowanie, SQLite uważa NULL za mniejszą niż jakakolwiek inna wartość.
Oznacza to, że wartości NULL pojawią się na początku zestawu wyników, jeśli użyjesz ASC lub na końcu zestawu wyników, jeśli użyjesz DESC.
SQLite 3.30.0 dodał NULLS FIRST
i NULLS LAST
opcje do ORDER BY
klauzula. NULLS FIRST
opcja określa, że wartości NULL pojawią się na początku zestawu wyników, podczas gdy NULLS LAST
opcja umieść NULL na końcu zestawu wyników.
Poniższy przykład używa ORDER BY
klauzula sortowania utworów według kompozytorów:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer;
Code language: SQL (Structured Query Language) (sql)
Po pierwsze, widzisz, że NULL pojawiają się na początku zestawu wyników, ponieważ SQLite traktuje je jako najniższe wartości. Gdy przewiniesz wynik, zobaczysz inne wartości:
Poniższy przykład używa NULLS LAST
opcja umieszczania NULL po innych wartościach:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer NULLS LAST;
Code language: SQL (Structured Query Language) (sql)
Jeśli przewiniesz dane wyjściowe, zobaczysz, że wartości NULL są umieszczane na końcu zestawu wyników:
W tym samouczku nauczyłeś się korzystać z SQLite ORDER BY
klauzula, aby posortować zestaw wyników za pomocą pojedynczej kolumny, wielu kolumn w porządku rosnącym i malejącym.