Расширенный SQL

Mar 03 2023
Недавно я создал учебник по SQL для начинающих, вы можете прочитать его здесь. Сегодня пришло время рассказать вам о более сложных темах, таких как операторы GROUP BY и HAVING, оператор MERGE и хранимые процедуры.

Не так давно я создал учебник по SQL для начинающих, вы можете прочитать его здесь . Сегодня пришло время рассказать вам о более сложных темах, таких как операторы GROUP BY и HAVING, оператор MERGE и хранимые процедуры.

ГРУППА ПО

Предложение GROUP BY в SQL используется для группировки строк в результирующем наборе на основе одного или нескольких столбцов. Обычно он используется в сочетании с агрегатными функциями, такими как COUNT, SUM, AVG, MIN и MAX, для вычисления значений для каждой группы.

SELECT category, SUM(sales)
FROM orders
GROUP BY category;

Другой пример:

SELECT department, COUNT(employee_id)
FROM employees
GROUP BY department;

Важно отметить, что вы должны использовать агрегатные функции для любых выбранных вами столбцов, которые не охватываются предложением GROUP BY, чтобы избежать получения ошибки. Кроме того, очень важно помнить, что столбцы в предложении GROUP BY определяют группы; порядок столбцов в операторе SELECT не влияет на результирующий набор.

НАЛИЧИЕ

В зависимости от условий агрегатной функции группы строк в результирующем наборе можно фильтровать с помощью предложения HAVING в SQL. Обычно его комбинируют с предложением GROUP BY, чтобы исключить группы, которые не соответствуют определенным требованиям.

Например, рассмотрим следующий SQL-запрос, который выбирает общий объем продаж для каждой категории продуктов в образце orderтаблицы и возвращает только те категории, общий объем продаж которых превышает 1000:

SELECT category, SUM(sales)
FROM orders
GROUP BY category
HAVING SUM(sales) > 1000;

Другой пример:

SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING COUNT(employee_id) > 5;

Подобно предложению WHERE, предложение HAVING используется для фильтрации групп после их создания предложением GROUP BY и применения агрегатных функций.

ОБЪЕДИНИТЬ

Оператор SQL MERGE используется для обновления или вставки данных в целевую таблицу на основе данных в исходной таблице или для объединения данных из двух или более таблиц в одну таблицу. Он часто используется как альтернатива операторам, объединяющим INSERT, UPDATE и DELETE.

Синтаксис:

MERGE INTO target_table
USING source_table
ON (join_condition)
WHEN MATCHED THEN
    UPDATE SET target_table.column1 = source_table.column1, ...
WHEN NOT MATCHED THEN
    INSERT (column1, column2, ...)
    VALUES (source_table.column1, source_table.column2, ...)

MERGE INTO products
USING prices
ON (products.product_id = prices.product_id)
WHEN MATCHED THEN
    UPDATE SET products.price = prices.price;

MERGE INTO employees
USING temp_employees
ON (employees.employee_id = temp_employees.employee_id)
WHEN MATCHED THEN
    UPDATE SET employees.salary = temp_employees.salary
WHEN NOT MATCHED THEN
    INSERT (employee_id, first_name, last_name, department, salary)
    VALUES (temp_employees.employee_id, temp_employees.first_name, temp_employees.last_name, temp_employees.department, temp_employees.salary);

Некоторые системы управления базами данных, такие как MySQL и SQLite, не поддерживают оператор MERGE, поэтому вместо него необходимо использовать комбинацию операторов INSERT, UPDATE и DELETE.

Команду MERGE следует протестировать на небольшом подмножестве данных, прежде чем использовать ее для всей таблицы, так как это может сильно повлиять на производительность больших таблиц.

Хранимые процедуры

Предварительно скомпилированная группа операторов SQL, которые хранятся в базе данных как хранимая процедура. Они часто используются для выполнения определенной задачи или набора действий, таких как получение информации из базы данных или выполнение сложных математических операций. По сравнению с выполнением множества отдельных операторов SQL хранимые процедуры более универсальны и эффективны, поскольку они могут получать входные параметры и возвращать выходные значения.

Вот пример простой хранимой процедуры, которая извлекает все строки из таблицы employees:

CREATE PROCEDURE GetAllEmployees
AS
BEGIN
    SELECT * FROM employees;
END

EXEC GetAllEmployees;

Поддержите нашу публикацию, подписавшись на нее

Также обратитесь к следующим статьям.

Java 8 Stream API Вопросы и ответы на интервью