SELECT, WHERE, ORDER BY и LIMIT
Освежаем основу выборки: фильтр, сортировка и постраничный вывод — на живых примерах.
SELECT читает строки из таблиц;
WHEREфильтрует их,ORDER BYсортирует,LIMITограничивает количество.
Каркас запроса
Порядок частей в запросе фиксирован: SELECT … FROM … WHERE … ORDER BY … LIMIT …. Все эти части переносимы и работают в песочнице. Создадим данные для экспериментов:
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT,
department TEXT,
salary INTEGER
);
INSERT INTO employees (name, department, salary) VALUES
('Анна', 'IT', 120000),
('Борис', 'IT', 90000),
('Вера', 'HR', 80000),
('Глеб', 'Sales', 110000),
('Дина', 'Sales', 95000);
SELECT name, salary FROM employees WHERE salary > 90000 ORDER BY salary DESC;
Вывод:
name salary Анна 120000 Глеб 110000 Дина 95000
Условия в WHERE
В WHERE можно комбинировать условия операторами AND, OR, NOT и использовать IN, BETWEEN, LIKE (поиск по шаблону), IS NULL.
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT,
department TEXT,
salary INTEGER
);
INSERT INTO employees (name, department, salary) VALUES
('Анна', 'IT', 120000),
('Борис', 'IT', 90000),
('Вера', 'HR', 80000),
('Глеб', 'Sales', 110000);
SELECT name, department
FROM employees
WHERE department IN ('IT', 'Sales') AND salary >= 100000;
Вывод:
name department Анна IT Глеб Sales
LIMIT и OFFSET — постранично
LIMIT n берёт первые n строк, OFFSET m — пропускает первые m. Это основа пагинации: страница 2 по 2 записи — LIMIT 2 OFFSET 2.
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT,
salary INTEGER
);
INSERT INTO employees (name, salary) VALUES
('Анна', 120000), ('Глеб', 110000), ('Дина', 95000),
('Борис', 90000), ('Вера', 80000);
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 2 OFFSET 2;
Вывод:
name salary Дина 95000 Борис 90000
Мы отсортировали по убыванию зарплаты, пропустили двух самых высокооплачиваемых и взяли следующих двух — это «третье и четвёртое места».
Итог
- Порядок частей:
SELECT → FROM → WHERE → ORDER BY → LIMIT. WHEREфильтрует; условия комбинируются черезAND/OR,IN,BETWEEN,LIKE.ORDER BYсортирует (ASCпо возрастанию,DESCпо убыванию).LIMIT+OFFSET— основа постраничного вывода.
Проверьте себя
1. Что сделает запрос с LIMIT 2 OFFSET 2 после ORDER BY?
Aвернёт две первые строки
Bпропустит две строки и вернёт следующие две
Cвернёт все строки кроме двух
Dвернёт ровно две случайные строки
2. Какой оператор ищет значение в списке вариантов?
ABETWEEN
BLIKE
CIN
DIS NULL
3. Как отсортировать результат по убыванию?
AORDER BY ... ASC
BORDER BY ... DESC
CSORT BY ... DOWN
DGROUP BY ...