Составить запрос на выборку

Устали гуглить синтаксис? Научитесь составить запрос на выборку идеально: JOIN, WHERE и секреты профи. Читать 5 мин — экономить часы!

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

Оператор SELECT — это фундамент языка SQL (Structured Query Language). Именно с его помощью извлекаются данные из реляционных баз данных для анализа, отчетов или передачи в приложения. Независимо от того, работаете ли вы с Microsoft SQL Server, MySQL, PostgreSQL или Oracle, синтаксис базовой выборки остается практически неизменным благодаря стандартам ANSI SQL.

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

Минимальный запрос на выборку состоит из двух обязательных ключевых слов: SELECT (что выбираем) и FROM (откуда выбираем).

SELECT имя_столбца1, имя_столбца2, ...
FROM имя_таблицы;

Пример: Выборка всех столбцов

Используйте звездочку , чтобы получить все колонки таблицы. Примечание: в продакшн-коде лучше перечислять столбцы явно для производительности и предсказуемости.

SELECT  FROM Employees;

Пример: Выборка конкретных столбцов

SELECT FirstName, LastName, HireDate
FROM Employees;

Фильтрация данных: предложение WHERE

Чтобы сузить набор результатов, используется предложение WHERE. Оно позволяет задавать условия отбора строк.

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

  • = — равно
  • <> или != — не равно
  • >, <, >=, <= — больше, меньше, больше или равно, меньше или равно
  • BETWEEN — в диапазоне (включительно)
  • IN, в списке значений
  • LIKE — соответствие шаблону (использует % — любое кол-во символов, _ — один символ)
  • IS NULL / IS NOT NULL, проверка на пустое значение

Примеры фильтрации

-- Сотрудники, нанятые после 2020 года
SELECT * FROM Employees
WHERE HireDate > '2020-01-01';

-- Сотрудники из определенных отделов
SELECT * FROM Employees
WHERE DepartmentID IN (1, 3, 5);

-- Поиск по части имени (начинается на 'А')
SELECT * FROM Employees
WHERE FirstName LIKE 'А%';

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

Результаты выборки не гарантированно упорядочены, если не указано ORDER BY. По умолчанию сортировка по возрастанию (ASC), для убывания используется DESC.

SELECT LastName, FirstName, Salary
FROM Employees
ORDER BY Salary DESC, LastName ASC;

Ограничение результатов: LIMIT / TOP / FETCH

Синтаксис ограничения количества строк зависит от СУБД:

  • MySQL, PostgreSQL, SQLite: LIMIT 10
  • Microsoft SQL Server (современные версии): OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY или старый TOP (10)
  • Oracle (12c+): FETCH FIRST 10 ROWS ONLY

Пример для SQL Server

SELECT TOP (10) * FROM Products
ORDER BY Price DESC;

Пример для MySQL / PostgreSQL

SELECT * FROM Products
ORDER BY Price DESC
LIMIT 10;

Агрегация и группировка: GROUP BY, HAVING

Для вычисления сводных значений (суммы, счетчики, средние) используются агрегатные функции: COUNT, SUM, AVG, MIN, MAX.

Группировка данных

SELECT DepartmentID, COUNT(*) AS EmployeeCount, AVG(Salary) AS AvgSalary
FROM Employees
GROUP BY DepartmentID;

Фильтрация групп: HAVING

WHERE фильтрует строки до группировки, HAVING — группы после агрегации.

SELECT DepartmentID, COUNT() AS Cnt
FROM Employees
GROUP BY DepartmentID
HAVING COUNT() > 5;

Объединение таблиц: JOIN

Реляционная модель подразумевает хранение данных в нормализованных таблицах. JOIN позволяет объединять их по связанным столбцам (обычно Primary Key и Foreign Key).

Основные типы JOIN

  1. INNER JOIN — только совпадающие строки в обеих таблицах.
  2. LEFT JOIN (LEFT OUTER JOIN) — все строки из левой таблицы + совпадения из правой (NULL, если нет совпадения).
  3. RIGHT JOIN — зеркально LEFT JOIN.
  4. FULL JOIN — все строки из обеих таблиц.
  5. CROSS JOIN — декартово произведение (все возможные пары).

Пример: Сотрудники и названия их отделов

SELECT e.FirstName, e.LastName, d.DepartmentName
FROM Employees AS e
INNER JOIN Departments AS d ON e.DepartmentID = d.DepartmentID
ORDER BY d.DepartmentName, e.LastName;

Подзапросы (Subqueries) и CTE

Сложную логику часто удобно разбить на части.

Подзапрос в WHERE

SELECT * FROM Employees
WHERE Salary > (SELECT AVG(Salary) FROM Employees);

Обобщенные табличные выражения (CTE) — WITH

Доступны в современных версиях SQL Server, PostgreSQL, MySQL 8.0+, Oracle. Повышают читаемость.

WITH HighPaid AS (
 SELECT EmployeeID, LastName, Salary
 FROM Employees
 WHERE Salary > 100000
)
SELECT h.LastName, d.DepartmentName
FROM HighPaid h
JOIN Departments d ON h.DepartmentID = d.DepartmentID;

Работа с разными СУБД: нюансы

Хотя стандарт SQL общий, у популярных систем есть отличия:

СУБД Особенности Актуальные версии (на 2026 год)
Microsoft SQL Server T-SQL диалект, мощные аналитические функции (OVER, PARTITION), интеграция с .NET/Azure. Скачивание дистрибутивов доступно на официальном портале. SQL Server 2022 (16.x), превью 2025
MySQL Популярен в вебе. Community Edition бесплатна (GPL). Поддержка JSON, CTE, оконных функций с версии 8.0. MySQL 8.0, 8.4 LTS, 9.x Innovation
PostgreSQL Расширяемость, строгое соблюдение стандартов, поддержка GIS, JSONB, пользовательских типов. PostgreSQL 16, 17 (бета)

Лучшие практики (Best Practices)

  • Избегайте SELECT * в продакшене. Указывайте явный список колонок.
  • Используйте индексы для столбцов в WHERE, JOIN, ORDER BY.
  • Параметризуйте запросы (Prepared Statements) для защиты от SQL-инъекций.
  • Анализируйте план выполнения (EXPLAIN / SET STATISTICS IO ON) для поиска узких мест.
  • Форматируйте код: отступы, заглавные буквы для ключевых слов — это облегчает поддержку.

Типичные ошибки новичков

  1. Забывание WHERE при UPDATE/DELETE (но для SELECT это просто вернет все строки).
  2. Сравнение с NULL через = NULL вместо IS NULL.
  3. Использование колонок не входящих в GROUP BY (в строгих режимах SQL это ошибка).
  4. Картезьянское произведение (Cross Join) по ошибке из-за пропуска условия ON.

Умение составлять запрос на выборку — ключевой навык для разработчика, аналитика и администратора БД. Начните с простых конструкций SELECT ... FROM ... WHERE, постепенно осваивая JOIN, агрегацию, подзапросы и оконные функции. Регулярная практика на реальных или учебных наборах данных (например, AdventureWorks для SQL Server или Sakila для MySQL/PostgreSQL) закрепит теорию на практике.

Статья подготовлена на основе актуальных стандартов SQL и документации ведущих вендоров на 2026 год. Для глубокого изучения рекомендуется обращаться к официальной документации вашей СУБД.