Селект — операция выборки данных в СУБД¶
Селект (от англ. select — «выбирать») — операция выборки данных из реляционной базы данных, реализуемая с помощью языка структурированных запросов SQL. В русскоязычной практике под словом «селект» обычно понимают оператор SELECT языка SQL, а также процесс выполнения запросов выборки в системах управления базами данных (СУБД). Оператор позволяет извлечь нужные строки и столбцы из одной или нескольких таблиц, отфильтровать их по заданным условиям, отсортировать, сгруппировать и выполнить агрегатные вычисления.
¶Оператор SELECT в SQL
Оператор SELECT является основным средством получения данных в SQL и входит в стандарт ANSI SQL (и его международную версию ISO/IEC 9075). Базовый синтаксис выглядит так:
``sql SELECT столбцы FROM таблица WHERE условия ORDER BY сортировка; ``
Пример простого запроса:
``sql SELECT name, price FROM products WHERE price > 1000 ORDER BY price DESC; ``
Этот запрос выбирает названия и цены товаров стоимостью более 1000, отсортированных по убыванию цены.
¶Основные конструкции
Оператор SELECT поддерживает множество конструкций, формирующих итоговый результат:
| Конструкция | Назначение |
|---|---|
SELECT * | Выбор всех столбцов таблицы |
WHERE | Фильтрация строк по условию |
GROUP BY | Группировка строк по значениям столбцов |
HAVING | Фильтрация после группировки |
ORDER BY | Сортировка результата |
LIMIT / TOP | Ограничение числа возвращаемых строк |
JOIN | Объединение данных из нескольких таблиц |
DISTINCT | Удаление дублирующихся строк |
UNION | Объединение результатов нескольких запросов |
SUBQUERY | Подзапросы — запросы внутри запроса |
¶Агрегатные функции
В сочетании с GROUP BY используются агрегатные функции: COUNT (подсчёт строк), SUM (сумма), AVG (среднее), MIN и MAX (минимум и максимум). Пример:
``sql SELECT category_id, COUNT() AS cnt, AVG(price) AS avg_price FROM products GROUP BY category_id HAVING COUNT() > 10; ``
Запрос возвращает категории, содержащие более 10 товаров, вместе с их количеством и средней ценой.
¶JOIN-соединения
Одна из ключевых возможностей SELECT — объединение данных из нескольких таблиц с помощью операторов соединения:
INNER JOIN— возвращает строки, имеющие совпадения в обеих таблицах;LEFT JOIN— сохраняет все строки левой таблицы, даже если совпадений нет;RIGHT JOIN— зеркальный вариантLEFT JOIN;FULL OUTER JOIN— возвращает все строки обеих таблиц;CROSS JOIN— декартово произведение строк двух таблиц.
Пример:
``sql SELECT o.id, c.name, o.total FROM orders o JOIN customers c ON o.customer_id = c.id WHERE o.total > 5000; ``
¶Подзапросы и коррелированные запросы
Подзапрос может использоваться в выражении WHERE, в списке выбираемых столбцов или в операторах FROM. Коррелированный подзапрос ссылается на столбцы внешнего запроса и выполняется для каждой строки результата. Пример:
``sql SELECT name FROM products p WHERE price > (SELECT AVG(price) FROM products WHERE category_id = p.category_id); ``
Запрос возвращает товары, цена которых выше средней по своей категории.
¶Оптимизация запросов
СУБД при выполнении SELECT-запросов используют оптимизатор запросов, который анализует запрос и выбирает план его выполнения. Ключевые механизмы оптимизации:
- Использование индексов — B-деревья, хеш-индексы, частичные и покрывающие индексы;
- Планы выполнения — перебор вариантов соединений (nested loop, hash join, merge join);
- Статистика — оценка селективности условий по гистограммам распределения значений;
- Материализованные представления — предварительно вычисленные результаты сложных запросов.
В PostgreSQL, MySQL, Oracle и Microsoft SQL Server для анализа плана выполнения используются команды EXPLAIN и EXPLAIN ANALYZE.
¶Подмножества SQL
Существуют подмножества SQL, ориентированные на выборку данных. Наиболее известный пример — SQL-92, упрощённая подмножество языка, используемая в протоколе ODBC и в библиотеке ADO. В нём разрешены только операторы SELECT без модификаций данных, что делает безопасным выполнение запросов от непривилегированных пользователей.
¶SELECT в других контекстах
Термин «селект» применяется и за пределами SQL:
- SELECT в HTML — элемент выпадающего списка
<select>, предоставляющий пользователю выбор одного или нескольких значений из набора; - SELECT в C++ — системный вызов
select()из POSIX, мониторящий готовность файловых дескрипторов к вводу-выводу; - SELECT в Excel — функция выборки данных, а также SQL-запросы через подключение OLE DB (MS Query);
- SELECT в реляционной алгебре — операция σ (сигма), фильтрующая строки таблицы по предикату; именно ей соответствует
WHEREв SQL.
¶Селект как термин в русском языке
В русскоязычной IT-среде слово «селект» используется как калька с английского и часто обозначает не только сам оператор, но и процесс написания, оптимизации и выполнения запросов выборки. Выражения вроде «написать селект», «медленный селект», «селект с джойнами» широко распространены в профессиональном жаргоне программистов и аналитиков данных.
Источники:
- ISO/IEC 9075:2016 — Information technology — Database languages — SQL
- К. Дж. Дейт — «Введение в системы баз данных»
- Б. Кайкен, Р. Мюлдер, Р. ван дер Линден — «SQL. Полное руководство»
- Документация PostgreSQL: https://www.postgresql.org/docs/current/tutorial-select.html
- Документация Microsoft: T-SQL SELECT statement
