SELECT, WHERE, ORDER BY, LIMIT
Освежаем выборку данных и сразу пробуем фильтры и сортировку в живой песочнице.
SELECT — основная команда чтения: она выбирает столбцы, фильтрует строки условием, сортирует результат и ограничивает его размер.
Готовим данные для экспериментов
Создадим таблицу сотрудников — на ней мы будем тренироваться весь урок. Пример полностью переносимый, запускайте и меняйте условия.
CREATE TABLE staff (
id INTEGER PRIMARY KEY,
name TEXT,
dept TEXT,
salary INTEGER
);
INSERT INTO staff (id, name, dept, salary) VALUES
(1, 'Анна', 'IT', 120000),
(2, 'Борис', 'IT', 95000),
(3, 'Вера', 'Продажи', 80000),
(4, 'Глеб', 'Продажи', 85000),
(5, 'Дина', 'HR', 70000);
SELECT name, salary FROM staff;
Вывод:
Анна|120000 Борис|95000 Вера|80000 Глеб|85000 Дина|70000
Фильтрация: WHERE
WHERE отбирает строки по условию. Условия комбинируются через AND, OR, NOT.
SELECT name, dept, salary
FROM staff
WHERE dept = 'IT' AND salary > 100000;
Вывод:
Анна|IT|120000
Полезные операторы для WHERE: IN (...) — значение из списка, BETWEEN a AND b — диапазон, LIKE — поиск по шаблону, IS NULL — проверка на пустоту.
SELECT name, dept
FROM staff
WHERE dept IN ('IT', 'HR')
AND salary BETWEEN 70000 AND 100000;
Вывод:
Борис|IT Дина|HR
Сортировка: ORDER BY
ORDER BY упорядочивает результат. ASC — по возрастанию (по умолчанию), DESC — по убыванию. Можно сортировать по нескольким столбцам.
SELECT name, dept, salary
FROM staff
ORDER BY dept ASC, salary DESC;
Вывод:
Дина|HR|70000 Анна|IT|120000 Борис|IT|95000 Глеб|Продажи|85000 Вера|Продажи|80000
Сначала строки сгруппировались по отделу (по алфавиту), а внутри отдела — по убыванию зарплаты.
Ограничение: LIMIT и OFFSET
LIMIT ограничивает число строк, OFFSET пропускает первые N. Вместе это даёт постраничную выборку (пагинацию).
-- Топ-2 по зарплате
SELECT name, salary
FROM staff
ORDER BY salary DESC
LIMIT 2;
Вывод:
Анна|120000 Борис|95000
Чтобы получить «вторую страницу» по 2 записи, добавьте OFFSET 2. Важно: без ORDER BY порядок строк не гарантирован, поэтому пагинацию всегда делают с явной сортировкой.
Итог
WHEREфильтрует строки; операторыIN,BETWEEN,LIKE,IS NULLрасширяют условия.ORDER BYсортирует (ASC/DESC), можно по нескольким столбцам.LIMITиOFFSETограничивают и пропускают строки; для стабильной пагинации нуженORDER BY.