Инструкции по настройке
- Убедитесь, что у вас есть база данных, совместимая с SQL (например, MySQL или PostgreSQL), и необходимые разрешения на создание и запрос данных.
- Подготовьте примерную схему базы данных с соответствующими таблицами.
Чтобы узнать еще больше советов для data-анализа, регистрируйтесь на бесплатный интенсив по анализу данных на Python и ChatGPT. Вас ждут 3 урока: «Основы аналитики данных через знакомые примеры», «Первые шаги в анализе данных на Python» и «Визуализация данных». Также вы получите проверку проекта по итогам выполнения всех заданий, обратную связь и сертификат. Регистрируйтесь, будет интересно!

- ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ
- Где и как применять? Потестируем модель после установки на разных задачах
- Как дообучить модель под себя?
Практическая реализация
Подзапросы в выражении SELECT
-- Using a subquery to return the maximum salary
SELECT name, department_id, salary
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);Подзапросы в секции FROM
-- Subquery returns a derived table containing the average salary per department
SELECT department_id, avg_salary
FROM (SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id) AS dept_avg;Подзапросы в секции WHERE
-- Subquery to filter employees with above average salaries
SELECT name, department_id, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);Подзапросы в выражении INSERT
-- Inserting the result of a subquery into a new table
INSERT INTO high_earners (name, salary)
SELECT name, salary
FROM employees
WHERE salary > 100000;Создание временной таблицы
-- Creating a temporary table for intermediate calculations
CREATE TEMPORARY TABLE temp_avg_salary AS
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id;Использование временной таблицы
-- Querying the temporary table
SELECT e.name, e.salary, t.avg_salary
FROM employees e
JOIN temp_avg_salary t ON e.department_id = t.department_id
WHERE e.salary > t.avg_salary;Очистка временной таблицы
-- Dropping the temporary table
DROP TEMPORARY TABLE IF EXISTS temp_avg_salary;Эти примеры помогут улучшить data-анализ и работу с данными с помощью подзапросов и временных таблиц в SQL.
Написание простых подзапросов: практическая реализация
Пример схемы базы данных
Предположим, что у нас есть две таблицы:
- employees(employee_id, name, department_id, salary)
- departments(department_id, department_name)
1. Использование подзапроса в секции SELECT
SELECT
name,
(SELECT department_name
FROM departments
WHERE departments.department_id = employees.department_id) AS department_name
FROM
employees;2. Использование подзапроса в секции FROM
SELECT
department_name,
total_salary
FROM
(SELECT
department_id,
SUM(salary) AS total_salary
FROM
employees
GROUP BY
department_id) AS dept_salaries
JOIN
departments
ON
dept_salaries.department_id = departments.department_id;3. Использование подзапроса в секции WHERE
SELECT
name,
salary
FROM
employees
WHERE
salary > (SELECT AVG(salary) FROM employees);4. Использование подзапроса с оператором IN
SELECT
name
FROM
employees
WHERE
department_id IN (SELECT department_id FROM departments WHERE department_name = 'Sales');5. Использование подзапроса с оператором EXISTS
SELECT
name,
department_id
FROM
employees e
WHERE
EXISTS (SELECT 1 FROM departments d WHERE d.department_id = e.department_id AND d.department_name = 'Engineering');6. Использование нескольких подзапросов
SELECT
e1.name AS employee_name,
d1.department_name AS department_name,
(SELECT AVG(salary)
FROM employees e2
WHERE e2.department_id = e1.department_id) AS avg_department_salary
FROM
employees e1
JOIN
departments d1
ON
e1.department_id = d1.department_id;Эти примеры иллюстрируют практические случаи использования подзапросов в SQL, которые можно применить в различных сценариях data-анализа и манипулирования данными.
Расширенные подзапросы и корреляция в SQL
Пример коррелированного подзапроса
SELECT employee_id, salary
FROM employees e1
WHERE salary > (
SELECT AVG(salary)
FROM employees e2
WHERE e1.department_id = e2.department_id
);Использование временных таблиц
-- Creating a temporary table
CREATE TEMPORARY TABLE high_salaries AS
SELECT employee_id, salary
FROM employees
WHERE salary > 100000;
-- Querying the temporary table
SELECT * FROM high_salaries;Подзапросы в секции SELECT
SELECT
employee_id,
salary,
(SELECT AVG(salary)
FROM employees e2
WHERE e1.department_id = e2.department_id) AS average_department_salary
FROM employees e1;Подзапросы в секции FROM
SELECT department_id, AVG(salary) AS avg_salary
FROM (
SELECT department_id, salary
FROM employees
) AS emp
GROUP BY department_id;Подзапросы в секции EXISTS
SELECT employee_id, first_name, last_name
FROM employees e1
WHERE EXISTS (
SELECT 1
FROM departments d
WHERE d.manager_id = e1.employee_id
);Обновления с помощью подзапросов
UPDATE employees
SET salary = salary * 1.10
WHERE employee_id IN (
SELECT employee_id
FROM high_salaries
);Удаление с помощью подзапросов
DELETE FROM employees
WHERE department_id NOT IN (
SELECT department_id
FROM departments
);Очистка временной таблицы
DROP TEMPORARY TABLE IF EXISTS high_salaries;Заключение
Эти примеры можно использовать на практике для реализации расширенных подзапросов и корреляции в SQL.
Использование временных таблиц в SQL
Создание временной таблицы
CREATE TEMPORARY TABLE temp_sales (
sale_id INT,
product_id INT,
quantity INT,
sale_date DATE
);Вставка данных во временную таблицу
INSERT INTO temp_sales (sale_id, product_id, quantity, sale_date)
VALUES
(1, 101, 2, '2023-01-10'),
(2, 102, 1, '2023-01-11'),
(3, 101, 5, '2023-01-12');Выборка данных из временной таблицы
SELECT * FROM temp_sales;Использование временной таблицы в JOIN
SELECT
p.product_name,
t.quantity,
t.sale_date
FROM
products p
JOIN
temp_sales t ON p.product_id = t.product_id;Обновление записей во временной таблице
UPDATE temp_sales
SET quantity = 3
WHERE sale_id = 2;Удаление записей из временной таблицы
DELETE FROM temp_sales
WHERE sale_date < '2023-01-11';Удаление временной таблицы
DROP TEMPORARY TABLE IF EXISTS temp_sales;Замените названия таблиц и столбцов на те, которые используются в вашей реальной схеме базы данных. Эта реализация применима в практической работе с SQL.
Создание и использование временных таблиц в SQL
Создание временных таблиц
-- Create a temporary table to store intermediate results
CREATE TEMPORARY TABLE temp_sales_summary (
category_id INT,
total_sales DECIMAL(10, 2),
total_orders INT
);Вставка данных во временные таблицы
-- Populate the temporary table with summarized sales data
INSERT INTO temp_sales_summary (category_id, total_sales, total_orders)
SELECT
category_id,
SUM(sales_amount) AS total_sales,
COUNT(order_id) AS total_orders
FROM
sales
GROUP BY
category_id;Использование временных таблиц
-- Query the temporary table for further analysis
SELECT
tss.category_id,
tss.total_sales,
tss.total_orders,
c.category_name
FROM
temp_sales_summary tss
JOIN
categories c ON tss.category_id = c.category_id;Удаление временных таблиц
-- Drop the temporary table once it is no longer needed
DROP TEMPORARY TABLE IF EXISTS temp_sales_summary;Эта реализация показывает, как создавать, использовать и удалять временные таблицы, чтобы облегчить data-анализ и манипулирование данными в SQL.
Комбинирование подзапросов и временных таблиц для сложных запросов
-- 1. Create a temporary table to store intermediate results
CREATE TEMPORARY TABLE temp_sales AS
SELECT product_id, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product_id;
-- 2. Use a subquery to calculate average quantity sold for products in 'Electronics' category
SELECT product_id, total_quantity
FROM temp_sales
WHERE product_id IN (
SELECT id
FROM products
WHERE category = 'Electronics'
) AND total_quantity > (
SELECT AVG(total_quantity)
FROM temp_sales
);
-- 3. Clean up: Drop the temporary table
DROP TEMPORARY TABLE temp_sales;Код демонстрирует:
- Создание временной таблицы (temp_sales) для хранения суммы количества проданных товаров.
- Использование подзапроса для фильтрации товаров, относящихся к категории «Электроника» и имеющих общее количество проданных товаров больше, чем среднее общее количество проданных товаров для всех товаров.
- Удаление временной таблицы после ее использования для очистки.
Примеры и команды из этого руководства помогут вам быстрее освоить SQL и получить только основу для обучения и хорошие результаты. А чтобы еще лучше прокачать навыки data-анализа, приходите на бесплатный интенсив по анализу данных на Python и ChatGPT. Вас ждут 3 мощных дня без воды с практикой и проверкой домашних заданий, не пропустите!
- Освой Perplexity и узнай, как пользоваться функционалом остальных ИИ в одном
- УЧАСТВОВАТЬ ЗА 0 РУБ.
- Расскажем, как получить подписку (240$) бесплатно
- ПОКАЖЕМ, КАК РАЗВЕРНУТЬ МОДЕЛЬ DEEPSEEK R1 ПРЯМО НА СВОЁМ КОМПЬЮТЕРЕ