Что делает команда SELECT в SQL?

Команда SELECT в SQL — это основной инструмент для извлечения данных из одной или нескольких таблиц в реляционной базе данных. Она используется для выборки информации, соответствующей определённым условиям, и может возвращать как отдельные строки, так и агрегированные, отсортированные, сгруппированные или вычисленные данные. SELECT является частью языка манипуляции данными (DML — Data Manipulation Language) и представляет собой фундаментальную конструкцию практически любого SQL-запроса.

Общий синтаксис SELECT

SELECT \[столбцы или выражения\]
FROM \[таблица\]
\[WHERE условия\]
\[GROUP BY столбцы\]
\[HAVING условия_группировки\]
\[ORDER BY столбцы\]
\[LIMIT / OFFSET / TOP ... (зависит от СУБД)\]

Примеры простого использования

-- Получить все данные из таблицы Employees

SELECT \* FROM Employees;

-- Получить имя и зарплату всех сотрудников

SELECT Name, Salary FROM Employees;

Основные возможности SELECT

1. Выбор конкретных столбцов

Команда позволяет явно указать, какие поля нужно извлечь:

SELECT FirstName, LastName FROM Customers;

2. Использование выражений и вычислений

Можно производить вычисления прямо в SELECT-запросе:

SELECT Price, Quantity, Price \* Quantity AS Total
FROM Orders;

3. Переименование столбцов (AS)

Можно задать псевдонимы (алиасы) для столбцов:

SELECT FirstName AS Имя, LastName AS Фамилия FROM Customers;

4. Фильтрация данных (WHERE)

Оператор WHERE позволяет извлекать только те строки, которые соответствуют условиям:

SELECT \* FROM Products WHERE Price > 100;

Условия могут быть сложными:

SELECT \* FROM Products
WHERE Category = 'Books' AND Price BETWEEN 10 AND 50;

5. Сортировка данных (ORDER BY)

Сортировка результатов по указанным столбцам:

SELECT \* FROM Customers ORDER BY LastName ASC;

Можно сортировать по нескольким столбцам и указывать направление (ASC, DESC):

SELECT \* FROM Orders ORDER BY OrderDate DESC, Amount ASC;

6. Группировка данных (GROUP BY)

Группировка позволяет агрегировать данные, например, по количеству или сумме:

SELECT Department, AVG(Salary) AS AvgSalary
FROM Employees
GROUP BY Department;

7. Фильтрация после группировки (HAVING)

Оператор HAVING применяется после GROUP BY для фильтрации агрегированных данных:

SELECT Department, COUNT(\*) AS Count
FROM Employees
GROUP BY Department
HAVING COUNT(\*) > 10;

8. Объединение таблиц (JOIN)

Команда SELECT позволяет объединять данные из нескольких таблиц:

SELECT Orders.OrderID, Customers.Name
FROM Orders
JOIN Customers ON Orders.CustomerID = Customers.ID;

JOIN-ы бывают разных типов: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN.

9. Вложенные запросы (Subqueries)

Можно использовать подзапросы в SELECT, WHERE, FROM, HAVING:

SELECT Name
FROM Employees
WHERE DepartmentID IN (
SELECT ID FROM Departments WHERE Name = 'IT'
);

10. DISTINCT — Удаление дубликатов

Позволяет выбрать только уникальные значения:

SELECT DISTINCT Country FROM Customers;

11. Ограничение количества строк (LIMIT, TOP)

В разных СУБД используется разный синтаксис:

MySQL/PostgreSQL:

```python
SELECT * FROM Products LIMIT 10 OFFSET 5;

**SQL Server:  
<br/>**```python  
SELECT TOP 10 \* FROM Products;  

12. Объединение результатов (UNION, UNION ALL)

Позволяет объединить результат двух или более запросов:

SELECT Name FROM Clients
UNION
SELECT Name FROM Suppliers;
  • UNION удаляет дубликаты.

  • UNION ALL сохраняет все строки, включая дубликаты.

13. Оконные функции (Window Functions)

Расширенный способ анализа строк внутри групп:

SELECT Name, Salary,
RANK() OVER (PARTITION BY Department ORDER BY Salary DESC) AS RankInDept
FROM Employees;

14. CASE – логика внутри SELECT

Позволяет добавлять условную логику:

SELECT Name,
CASE
WHEN Salary > 100000 THEN 'High'
WHEN Salary > 50000 THEN 'Medium'
ELSE 'Low'
END AS SalaryGroup
FROM Employees;

Особенности выполнения SELECT-запроса

SQL-запросы логически обрабатываются в следующем порядке:

  1. FROM (и JOIN)

  2. WHERE

  3. GROUP BY

  4. HAVING

  5. SELECT

  6. ORDER BY

  7. LIMIT

Этот порядок объясняет, почему, например, в SELECT нельзя ссылаться на алиасы, созданные в ORDER BY или WHERE.

SELECT и производительность

  • Не использовать SELECT * в продакшене: он может тянуть ненужные данные.

  • Следует индексировать поля, по которым идёт фильтрация или сортировка.

  • Использование оконных функций может быть дорогостоящим на больших объёмах.

  • Избегать вложенных подзапросов, если можно выразить всё через JOIN.

Команда SELECT является ключевым инструментом для доступа и анализа данных в SQL. Она гибка, расширяема, поддерживает множественные операторы, агрегаты, вложенные структуры и масштабируется от простых до чрезвычайно сложных аналитических запросов.