ORDER BY
Sort query results
ORDER BY sorts the result set by one or more columns.
Basic Sorting
-- Ascending (A-Z, 0-9) - default SELECT * FROM users ORDER BY name; SELECT * FROM users ORDER BY name ASC; -- Descending (Z-A, 9-0) SELECT * FROM users ORDER BY created_at DESC;
Multiple Columns
Sort by first column, then by second column for ties:
-- Sort by country A-Z, then by name A-Z within each country SELECT * FROM users ORDER BY country, name; -- Mix directions SELECT * FROM products ORDER BY category ASC, price DESC; -- Most expensive first within each category SELECT * FROM products ORDER BY category, price DESC;
Sorting by Expressions
-- Sort by calculated value SELECT *, price * quantity AS total FROM order_items ORDER BY price * quantity DESC; -- Sort by alias SELECT *, price * quantity AS total FROM order_items ORDER BY total DESC; -- Sort by column position (not recommended) SELECT name, email, created_at FROM users ORDER BY 3 DESC; -- Orders by 3rd column (created_at)
NULL Handling
-- PostgreSQL: Control NULL position SELECT * FROM users ORDER BY phone NULLS FIRST; SELECT * FROM users ORDER BY phone NULLS LAST; -- SQLite/MySQL: NULLs are smallest (first in ASC, last in DESC) -- To put NULLs last in ascending order: SELECT * FROM users ORDER BY phone IS NULL, phone ASC;
Custom Sort Order
-- Custom priority order using CASE
SELECT * FROM orders
ORDER BY
CASE status
WHEN 'urgent' THEN 1
WHEN 'pending' THEN 2
WHEN 'processing' THEN 3
WHEN 'completed' THEN 4
ELSE 5
END;