SELECT: базовые запросы

SELECT: базовые запросы

SELECT — самая важная SQL-команда для тестировщика. С её помощью вы читаете данные из базы: проверяете результаты действий, ищете нужные записи, изучаете состояние системы.


Базовый синтаксис SELECT

SELECT столбцы
FROM таблица
WHERE условие
ORDER BY столбец [ASC | DESC]
LIMIT количество
OFFSET смещение;

Минимальный запрос — выбрать все строки и все столбцы:

SELECT * FROM users;

Выбрать только нужные столбцы:

SELECT id, name, email FROM users;

* — удобно для изучения, но в реальных запросах лучше указывать конкретные столбцы.


WHERE: фильтрация строк

WHERE оставляет только строки, удовлетворяющие условию.

-- Найти пользователя по email
SELECT * FROM users WHERE email = 'anna@example.com';

-- Найти активных пользователей
SELECT * FROM users WHERE is_active = true;

-- Найти заказы на сумму больше 1000 рублей
SELECT * FROM orders WHERE total > 1000;

Операторы сравнения

ОператорСмыслПример
=Равноstatus = 'paid'
!= или <>Не равноstatus != 'cancelled'
>Большеtotal > 500
<Меньшеtotal < 100
>=Больше или равноquantity >= 1
<=Меньше или равноprice <= 1000

Логические операторы AND / OR / NOT

-- Активные пользователи, зарегистрированные после 2024 года
SELECT * FROM users
WHERE is_active = true AND created_at >= '2024-01-01';

-- Заказы в статусе 'pending' или 'paid'
SELECT * FROM orders
WHERE status = 'pending' OR status = 'paid';

-- Неотменённые заказы
SELECT * FROM orders
WHERE NOT status = 'cancelled';

При смешивании AND и OR используйте скобки: (A OR B) AND C


LIKE: поиск по шаблону

LIKE ищет строки по шаблону. Два специальных символа:

  • % — любое количество любых символов (в т.ч. ноль)
  • _ — ровно один любой символ
-- Email заканчивается на @gmail.com
SELECT * FROM users WHERE email LIKE '%@gmail.com';

-- Имя начинается с 'Ан'
SELECT * FROM users WHERE name LIKE 'Ан%';

-- Имя из ровно 4 символов
SELECT * FROM users WHERE name LIKE '____';

-- Имя содержит 'тр' в любом месте
SELECT * FROM users WHERE name LIKE '%тр%';

В PostgreSQL LIKE чувствителен к регистру. Используйте ILIKE для регистронезависимого поиска.


IN: список значений

IN заменяет несколько условий OR:

-- Заказы в нескольких статусах
SELECT * FROM orders
WHERE status IN ('pending', 'paid');

-- Эквивалентно:
SELECT * FROM orders
WHERE status = 'pending' OR status = 'paid';

-- Исключить статусы
SELECT * FROM orders
WHERE status NOT IN ('cancelled', 'refunded');

BETWEEN: диапазон значений

-- Заказы на сумму от 500 до 5000 рублей
SELECT * FROM orders
WHERE total BETWEEN 500 AND 5000;

-- Регистрации за январь 2024
SELECT * FROM users
WHERE created_at BETWEEN '2024-01-01' AND '2024-01-31 23:59:59';

BETWEEN включает граничные значения.


IS NULL / IS NOT NULL

-- Пользователи без номера телефона
SELECT * FROM users WHERE phone IS NULL;

-- Заказы с указанной датой доставки
SELECT * FROM orders WHERE delivered_at IS NOT NULL;

ORDER BY: сортировка

-- По дате регистрации, старые первыми (ASC — по умолчанию)
SELECT * FROM users ORDER BY created_at ASC;

-- По сумме заказа, дорогие первыми
SELECT * FROM orders ORDER BY total DESC;

-- Многоуровневая сортировка
SELECT * FROM orders ORDER BY status ASC, created_at DESC;

LIMIT и OFFSET: ограничение результата

-- Первые 10 записей
SELECT * FROM users LIMIT 10;

-- Записи с 11-й по 20-ю (вторая страница по 10 записей)
SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 10;

-- Последние 5 заказов
SELECT * FROM orders ORDER BY created_at DESC LIMIT 5;

OFFSET начинается с 0. Для страницы N (начиная с 1): OFFSET = (N - 1) * LIMIT


DISTINCT: уникальные значения

-- Список статусов, которые есть в таблице
SELECT DISTINCT status FROM orders;

-- Уникальные категории товаров
SELECT DISTINCT category FROM products;

Практические примеры для тестировщика

-- Проверить, что пользователь зарегистрировался
SELECT id, name, email, created_at FROM users
WHERE email = 'newuser@example.com';

-- Найти все заказы конкретного пользователя
SELECT * FROM orders
WHERE user_id = 5
ORDER BY created_at DESC;

-- Найти товары, которых нет в наличии
SELECT id, name, price FROM products
WHERE stock = 0;

-- Последние 10 заказов с суммой выше 3000 рублей
SELECT * FROM orders
WHERE total > 3000
ORDER BY created_at DESC
LIMIT 10;

Итоги

  • SELECT столбцы FROM таблица — основа любого запроса чтения
  • WHERE — фильтрует строки по условию
  • Операторы: =, !=, >, <, >=, <=, AND, OR, NOT
  • LIKE — поиск по шаблону (% — любые символы, _ — один символ)
  • IN — проверка на вхождение в список значений
  • BETWEEN — диапазон значений (включительно)
  • IS NULL / IS NOT NULL — проверка на отсутствие значения
  • ORDER BY ... ASC/DESC — сортировка
  • LIMIT / OFFSET — ограничение и пагинация результатов
  • DISTINCT — убирает дубликаты из результата

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике