Оператор ORDER BY сортируют значения по одному или нескольких столбцам. Например, упорядочим выборку из таблицы products по столбцу price:
SELECT * FROM products ORDER BY price;
Также можно производить упорядочивание данных по псевдониму столбца, который определяется с помощью оператора AS:
SELECT name, product_count * price AS total_sum FROM products ORDER BY total_sum;
В качестве критерия сортировки также можно использовать вычисляемое выражение на основе столбцов:
SELECT name, price, product_count FROM products ORDER BY product_count * price;
По умолчанию данные сортируются по возрастанию, однако с помощью оператора DESC можно задать сортировку по убыванию.
SELECT name, product_count FROM products ORDER BY product_count DESC;
По умолчанию вместо DESC используется оператор ASC, который сортирует по возрастанию:
SELECT name, product_count FROM products ORDER BY product_count ASC;
При сортировке сразу по нескольким столбцам все эти столбцы указываются через запятую после оператора ORDER BY:
SELECT name, price, company FROM products ORDER BY company, name;
Здесь строки сначала сортируются по столбцу company по возрастанию. Затем если есть две строки, в которых столбец company имеет одинаковое значение, то они сортируются по столбцу name также по возрастанию. Но опять же с помощью ASC и DESC можно отдельно для разных столбцов определить сортировку по возрастанию и убыванию:
SELECT name, price, company FROM products ORDER BY company ASC, name DESC;
NULL представляет специальное значение, которое не сравнивается с другими значениями. По умолчанию NULL оценивается как наименьшее из значений. Это значит, что при сортировке по возрастанию значение NULL будет предшествовать всем остальным значениям.
Допустим, у нас есть следующая таблица пользователей:
DROP TABLE IF EXISTS users; CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, company TEXT, age INTEGER ); INSERT INTO users (name, company, age) VALUES ('Tom', 'Microsoft', 37), ('Bob', NULL, 41), ('Kate', 'Google', 29), ('Alice', NULL, 33);
Столбец company здесь хранит компанию, где работает пользователь. Но пользователь может не работать, и соответственно столбец будет иметь значение NULL. Отсортируем пользователей по компании:
SELECT * FROM users ORDER BY company;
Однако поведение по умолчанию, когда NULL идет перед остальными значениями при сортировке по возрастанию или в конце при сортировке по убыванию может быть нежелательным. В этом случае мы можем использовать дополнительные операторы: NULLS FIRST и NULLS LAST. NULLS FIRST указывает, что значение NULL идет перед всеми остальными значениями, а NULLS LAST - после.
Например, выведем значения NULL при сортировке по возрастанию после остальных значений:
SELECT * FROM users ORDER BY company NULLS LAST;