Оператор 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
- INNER JOIN — только совпадающие строки в обеих таблицах.
- LEFT JOIN (LEFT OUTER JOIN) — все строки из левой таблицы + совпадения из правой (NULL, если нет совпадения).
- RIGHT JOIN — зеркально LEFT JOIN.
- FULL JOIN — все строки из обеих таблиц.
- 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) для поиска узких мест. - Форматируйте код: отступы, заглавные буквы для ключевых слов — это облегчает поддержку.
Типичные ошибки новичков
- Забывание WHERE при UPDATE/DELETE (но для SELECT это просто вернет все строки).
- Сравнение с NULL через
= NULLвместоIS NULL. - Использование колонок не входящих в GROUP BY (в строгих режимах SQL это ошибка).
- Картезьянское произведение (Cross Join) по ошибке из-за пропуска условия ON.
Умение составлять запрос на выборку — ключевой навык для разработчика, аналитика и администратора БД. Начните с простых конструкций SELECT ... FROM ... WHERE, постепенно осваивая JOIN, агрегацию, подзапросы и оконные функции. Регулярная практика на реальных или учебных наборах данных (например, AdventureWorks для SQL Server или Sakila для MySQL/PostgreSQL) закрепит теорию на практике.
Статья подготовлена на основе актуальных стандартов SQL и документации ведущих вендоров на 2026 год. Для глубокого изучения рекомендуется обращаться к официальной документации вашей СУБД.