Перейти к содержанию
Innovialabs

Основы SQL: SELECT, WHERE, ORDER BY и LIMIT

Основы4 мин

Коротко

Почти любой запрос на чтение строится по схеме SELECT столбцы FROM таблица WHERE условие ORDER BY сортировка LIMIT количество. Освоив эти пять частей, а также LIKE, IN и IS NULL, вы сможете достать из базы большинство нужных данных.

Формула первого запроса

Запрос на чтение данных в SQL почти всегда собирается из одних и тех же частей в фиксированном порядке:

SELECT столбцы
FROM таблица
WHERE условие
ORDER BY сортировка
LIMIT количество;
  • SELECT — какие столбцы показать.
  • FROM — из какой таблицы.
  • WHERE — какие строки оставить.
  • ORDER BY — как отсортировать.
  • LIMIT — сколько строк вернуть.

Обязательны только SELECT и FROM, остальное добавляется по необходимости. Порядок частей менять нельзя.

Учебная таблица orders

Все примеры ниже — для такой таблицы заказов:

idcustomercitystatustotalcreated_at
1АлияТашкентpaid4500002026-03-01
2БобурСамаркандnew1200002026-03-02
3ДилнозаТашкентcancelled890002026-03-02
4ЕвгенийБухараpaid12000002026-03-03
5АлияТашкентnewNULL2026-03-04

SELECT: выбираем столбцы

SELECT customer, total FROM orders;

SELECT * вернёт все столбцы. Это удобно для изучения таблицы, но в коде приложения лучше перечислять столбцы явно: так запрос быстрее и не сломается, если в таблицу добавят новые поля.

WHERE: фильтруем строки

SELECT id, customer, total
FROM orders
WHERE status = 'paid' AND total > 300000;

Основные операторы:

  • сравнение: =, <> (не равно), >, <, >=, <=;
  • логика: AND, OR, NOT;
  • диапазон: total BETWEEN 100000 AND 500000 (границы включаются).

Если смешиваете AND и OR, ставьте скобки — AND выполняется раньше:

WHERE city = 'Ташкент' AND (status = 'new' OR status = 'paid')

IN и LIKE

IN заменяет цепочку OR:

SELECT * FROM orders WHERE city IN ('Ташкент', 'Бухара');

LIKE ищет по шаблону: % — любое количество символов, _ — ровно один символ.

SELECT * FROM orders WHERE customer LIKE 'Ал%';

Учтите: в PostgreSQL LIKE чувствителен к регистру (для поиска без учёта регистра есть ILIKE), а в MySQL это зависит от настроек сравнения строк. Шаблон, начинающийся с %, обычно не может использовать обычный индекс и на больших таблицах работает медленно.

NULL: отдельная история

NULL означает «значение неизвестно», а не ноль и не пустую строку. В заказе 5 сумма ещё не посчитана.

-- неправильно: не вернёт ни одной строки
SELECT * FROM orders WHERE total = NULL;

-- правильно
SELECT * FROM orders WHERE total IS NULL;
SELECT * FROM orders WHERE total IS NOT NULL;

Любое сравнение с NULL даёт «неизвестно», поэтому строка не проходит фильтр. Из-за этого WHERE total < 100000 тоже не покажет заказ 5. Если нужно подставить значение по умолчанию, используйте COALESCE(total, 0).

ORDER BY и LIMIT

SELECT customer, total, created_at
FROM orders
WHERE status <> 'cancelled'
ORDER BY total DESC, created_at ASC
LIMIT 3;
  • ASC — по возрастанию (по умолчанию), DESC — по убыванию.
  • Можно сортировать по нескольким столбцам: сначала по первому, при равенстве — по второму.
  • Куда попадут NULL при сортировке, зависит от СУБД. В PostgreSQL это можно задать явно: NULLS LAST.
  • LIMIT работает в PostgreSQL, MySQL и SQLite. В SQL Server вместо него TOP или OFFSET ... FETCH.

Без ORDER BY порядок строк не гарантирован, поэтому LIMIT без сортировки может каждый раз возвращать разные строки.

Частые ошибки начинающих

  • Двойные кавычки для текста. Строки пишутся в одинарных: 'paid'. Двойные в стандартном SQL обозначают имена столбцов.
  • = NULL вместо IS NULL.
  • Забытые скобки при сочетании AND и OR.
  • NOT IN со списком, где есть NULL — такой запрос не вернёт ни одной строки.
  • LIMIT без ORDER BY — «первые 10» оказываются случайными.
  • Тестовые запросы на рабочей базе. Пока учитесь, работайте с копией.

Частые вопросы

Нет, select и SELECT работают одинаково. Ключевые слова принято писать заглавными, чтобы их было легко отличить от названий таблиц и столбцов.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.