Определение простого CTE с использованием предложения WITH
На этом этапе вы научитесь определять простое Общее табличное выражение (Common Table Expression, CTE) с использованием предложения WITH
в MySQL. CTE - это временные именованные наборы результатов, на которые можно ссылаться в рамках одного оператора SELECT
, INSERT
, UPDATE
или DELETE
. Они полезны для разбиения сложных запросов на более мелкие и управляемые части, что улучшает читаемость и поддерживаемость кода.
Понимание CTE
CTE по сути представляет собой именованный подзапрос, который существует только в течение выполнения запроса. Он определяется с использованием предложения WITH
, за которым следуют имя CTE, список столбцов (необязательно) и ключевое слово AS
, а затем подзапрос, заключенный в скобки.
Создание примерной таблицы
Сначала создадим простую таблицу с именем employees
для работы. Выполните следующие SQL - инструкции в своей среде MySQL. Вы можете открыть командную строку MySQL, просто введя mysql
в терминале.
mysql
Затем создайте таблицу:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
department VARCHAR(50),
salary DECIMAL(10, 2)
);
INSERT INTO employees (employee_id, first_name, last_name, department, salary) VALUES
(1, 'John', 'Doe', 'Sales', 60000.00),
(2, 'Jane', 'Smith', 'Marketing', 75000.00),
(3, 'Robert', 'Jones', 'Sales', 55000.00),
(4, 'Emily', 'Brown', 'IT', 90000.00),
(5, 'Michael', 'Davis', 'Marketing', 70000.00);
Теперь выйдите из клиента MySQL:
exit
Определение простого CTE
Теперь определим простое CTE для выбора сотрудников из отдела 'Sales'.
WITH SalesEmployees AS (
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE department = 'Sales'
)
SELECT employee_id, first_name, last_name, salary
FROM SalesEmployees;
Пояснение:
WITH SalesEmployees AS (...)
: Это определяет CTE с именем SalesEmployees
.
SELECT employee_id, first_name, last_name, salary FROM employees WHERE department = 'Sales'
: Это подзапрос, который выбирает информацию о сотрудниках из таблицы employees
, где отдел - 'Sales'.
SELECT employee_id, first_name, last_name, salary FROM SalesEmployees
: Это основной запрос, который выбирает все столбцы из CTE SalesEmployees
.
Выполнение запроса
Для выполнения запроса вы можете сохранить его в файл с именем sales_employees.sql
в каталоге ~/project
с помощью nano
:
nano ~/project/sales_employees.sql
Вставьте SQL - код в файл, сохраните его (Ctrl+O) и выйдите (Ctrl+X).
Затем выполните SQL - файл с использованием командной строки MySQL:
mysql < ~/project/sales_employees.sql
Ожидаемый результат:
Результатом должен быть таблица, содержащая идентификатор сотрудника, имя, фамилию и зарплату всех сотрудников из отдела 'Sales':
+-------------+------------+-----------+----------+
| employee_id | first_name | last_name | salary |
+-------------+------------+-----------+----------+
| 1 | John | Doe | 60000.00 |
| 3 | Robert | Jones | 55000.00 |
+-------------+------------+-----------+----------+
2 rows in set (0.00 sec)
Это демонстрирует, как определить и использовать простое CTE для фильтрации данных из таблицы. В следующих шагах вы научитесь более продвинутым техникам, таким как рекурсивные CTE и объединение CTE с таблицами.