Сортировка, LIMIT, DISTINCT
Управляем порядком, количеством и уникальностью строк в результате.
ORDER BY задаёт порядок строк в результате; без него база может вернуть строки в любом порядке.
ORDER BY — сортировка
Сам по себе SQL не гарантирует порядок строк. Чтобы упорядочить результат, добавляют ORDER BY столбец. По умолчанию сортировка по возрастанию (ASC); для убывания пишут DESC.
CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT, price INTEGER);
INSERT INTO products (name, price) VALUES
('Клавиатура', 2500), ('Мышь', 1200), ('Монитор', 18000),
('Коврик', 600), ('Наушники', 5000);
SELECT name, price
FROM products
ORDER BY price DESC;
Вывод:
Монитор|18000 Наушники|5000 Клавиатура|2500 Мышь|1200 Коврик|600
Можно сортировать по нескольким столбцам: ORDER BY category, price DESC — сначала по категории, а внутри каждой категории по убыванию цены.
LIMIT — ограничение количества
LIMIT n возвращает не больше n строк. В связке с ORDER BY это даёт «топ-N»: например, три самых дорогих товара.
CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT, price INTEGER);
INSERT INTO products (name, price) VALUES
('Клавиатура', 2500), ('Мышь', 1200), ('Монитор', 18000),
('Коврик', 600), ('Наушники', 5000);
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 3;
Вывод:
Монитор|18000 Наушники|5000 Клавиатура|2500
OFFSET — пропуск строк
OFFSET m пропускает первые m строк. Связка LIMIT + OFFSET — основа постраничного вывода (пагинации). Возьмём «вторую страницу» по 2 товара, отсортировав по цене:
CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT, price INTEGER);
INSERT INTO products (name, price) VALUES
('Клавиатура', 2500), ('Мышь', 1200), ('Монитор', 18000),
('Коврик', 600), ('Наушники', 5000);
SELECT name, price
FROM products
ORDER BY price
LIMIT 2 OFFSET 2;
Вывод:
Клавиатура|2500 Наушники|5000
Мы пропустили два самых дешёвых товара (Коврик, Мышь) и взяли следующие два.
DISTINCT — только уникальные
DISTINCT убирает дубликаты из результата. Частая задача — получить список уникальных значений столбца, например все категории без повторов.
CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT, category TEXT);
INSERT INTO products (name, category) VALUES
('Клавиатура', 'Периферия'), ('Мышь', 'Периферия'),
('Монитор', 'Экраны'), ('Наушники', 'Аудио'), ('Колонки', 'Аудио');
SELECT DISTINCT category
FROM products
ORDER BY category;
Вывод:
Аудио Периферия Экраны
Хотя «Периферия» и «Аудио» встречались дважды, в результате каждая категория ровно один раз.
Итог
ORDER BY столбец [ASC|DESC]задаёт порядок; можно сортировать по нескольким столбцам.LIMIT nограничивает число строк,OFFSET mпропускает первыеm— вместе дают пагинацию.DISTINCTоставляет только уникальные строки результата.