Открыть сервисСервис

Селект — операция выборки данных в СУБД

Селект (от англ. 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-запросов используют оптимизатор запросов, который анализует запрос и выбирает план его выполнения. Ключевые механизмы оптимизации:

В 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
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru