Резюме :в този урок ще научите как да сортирате набор от резултати от заявка с помощта на SQLite ORDER BY
клауза.
Въведение в SQLite ORDER BY
клауза
SQLite съхранява данни в таблиците в неопределен ред. Това означава, че редовете в таблицата може или не може да са в реда, в който са били вмъкнати.
Ако използвате SELECT
оператор за заявка на данни от таблица, редът на редовете в резултантния набор не е посочен.
За да сортирате резултантния набор, добавяте ORDER BY
клауза към SELECT
изявление, както следва:
SELECT
select_list
FROM
table
ORDER BY
column_1 ASC,
column_2 DESC;
Code language: SQL (Structured Query Language) (sql)
ORDER BY
клаузата идва след FROM
клауза. Позволява ви да сортирате набора от резултати въз основа на една или повече колони във възходящ или низходящ ред.
В този синтаксис поставяте името на колоната, по която искате да сортирате, след ORDER BY
клауза, последвана от ASC
или DESC
ключова дума.
ASC
ключова дума означава възходящо.- И
DESC
ключова дума означава низходящо.
Ако не посочите ASC
или DESC
ключова дума, SQLite сортира резултатния набор с помощта на ASC
опция. С други думи, сортира набора от резултати във възходящ ред по подразбиране.
В случай, че искате да сортирате резултатния набор по множество колони, използвайте запетая (,), за да разделите две колони. ORDER BY
клаузата сортира редове с помощта на колони или изрази отляво надясно. С други думи, ORDER BY
клаузата сортира редовете с помощта на първата колона в списъка. След това сортира сортираните редове с помощта на втората колона и т.н.
Можете да сортирате резултатния набор, като използвате колона, която не се появява в списъка за избор на SELECT
клауза.
SQLite ORDER BY
пример за клауза
Да вземем tracks
таблица в примерната база данни за демонстрацията.
Да предположим, че искате да получите данни от колони за име, милисекунди и идентификатор на албум, използвате следното изявление:
SELECT
name,
milliseconds,
albumid
FROM
tracks;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
SELECT
израз, който не използва ORDER BY
клауза връща набор от резултати, който не е в никакъв ред.
Да предположим, че искате да сортирате набора от резултати въз основа на AlbumId
колона във възходящ ред, използвате следния израз:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Резултатът сега е сортиран по AlbumId
колона във възходящ ред, както е показано на екранната снимка.
SQLite използва ASC
по подразбиране, така че можете да го пропуснете в горния израз, както следва:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid;
Опитайте го
Да предположим, че искате да сортирате сортирания резултат (по AlbumId
) по-горе с Milliseconds
колона в низходящ ред. В този случай трябва да добавите Milliseconds
колона в ORDER BY
клауза, както следва:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC,
milliseconds DESC;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
SQLite сортира редовете по AlbumId
колона във възходящ ред първо. След това сортира сортирания набор от резултати по Milliseconds
колона в низходящ ред.
Ако погледнете парчетата от албума с AlbumId
1, откривате, че редът на записите се променя между двете изрази.
SQLite ORDER BY
с позицията на колоната
Вместо да указвате имената на колоните, можете да използвате позицията на колоната в ORDER BY
клауза.
Например, следният израз сортира песните и по albumid
(3-та колона) и Milliseconds
(2-ра колона) във възходящ ред.
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
3,2;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Числата 3 и 2 се отнасят до AlbumId
и Milliseconds
в списъка с колони, който се показва в SELECT
клауза.
Сортиране на NULL
В света на базата данни NULL е специално. Означава, че информацията липсва или данните не са приложими.
Да предположим, че искате да съхраните рождения ден на художник в таблица. В момента на запазване на записа на изпълнителя нямате информация за рождения ден.
За да представите неизвестната информация за рожден ден в базата данни, можете да използвате специална дата като 01.01.1900
или ''
празен низ. И двете стойности обаче не показват ясно, че рождената дата е неизвестна.
NULL е измислено, за да разреши този проблем. Вместо да се използва специална стойност, за да се посочи, че информацията липсва, се използва NULL.
NULL е специално, защото не можете да го сравните с друга стойност. Просто казано, ако двете части са неизвестни, не можете да ги сравнявате.
NULL дори не може да се сравни със себе си; NULL не е равно на себе си, така че NULL = NULL
винаги води до false.
Когато става въпрос за сортиране, SQLite счита NULL за по-малка от всяка друга стойност.
Това означава, че NULL ще се появят в началото на набора от резултати, ако използвате ASC или в края на набора от резултати, когато използвате DESC.
SQLite 3.30.0 добави NULLS FIRST
и NULLS LAST
опции за ORDER BY
клауза. NULLS FIRST
опция указва, че NULL ще се появят в началото на набора от резултати, докато NULLS LAST
опция поставя NULL в края на набора от резултати.
Следващият пример използва ORDER BY
клауза за сортиране на песни по композитори:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer;
Code language: SQL (Structured Query Language) (sql)
Първо, виждате, че NULL се появяват в началото на набора от резултати, защото SQLite ги третира като най-ниските стойности. Когато превъртите надолу резултата, ще видите други стойности:
Следващият пример използва NULLS LAST
опция за поставяне на NULL след други стойности:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer NULLS LAST;
Code language: SQL (Structured Query Language) (sql)
Ако превъртите надолу изхода, ще видите, че NULL се поставят в края на набора от резултати:
В този урок научихте как да използвате SQLite ORDER BY
клауза за сортиране на резултатния набор с помощта на една колона, множество колони във възходящ и низходящ ред.