SQLite - Подзапросы: Пособие для начинающих

Здравствуйте, будущие программисты! Сегодня мы отправимся в увлекательное путешествие в мир подзапросов SQLite. Не волнуйтесь, если вы новички в программировании - я буду вашим доброжелательным проводником, объясняя все шаг за шагом. Погружаемся!

SQLite - Subqueries

Что такое подзапросы?

Прежде чем мы углубимся в детали, давайте поймем, что такое подзапросы. Представьте, что вы планируете вечеринку и вам нужно составить список гостей. Вы можете сначала составить список всех своих друзей, а затем сузить его до тех, кто живет поблизости. В SQL подзапрос - это как第二步 - запрос внутри запроса, который помогает вам уточнить ваши результаты.

Подзапросы с оператором SELECT

Давайте начнем с наиболее распространенного использования подзапросов - в операторах SELECT.

Пример базового подзапроса

SELECT name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

В этом примере мы ищем сотрудников, чья зарплата выше средней. Внутренний запрос (SELECT AVG(salary) FROM employees) calculates среднюю зарплату, а внешний запрос использует этот результат для фильтрации сотрудников.

Подзапрос в предложении FROM

SELECT department, avg_salary
FROM (
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
) AS dept_salaries
WHERE avg_salary > 50000;

Здесь мы создаем временный стол с средней зарплатой по отделам, а затем выбираем отделы с средней зарплатой выше 50 000.

Подзапросы с оператором INSERT

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

INSERT INTO high_earners (employee_id, name)
SELECT id, name
FROM employees
WHERE salary > (SELECT AVG(salary) * 1.5 FROM employees);

Этот запрос вставляет сотрудников, зарабатывающих больше 1.5 раза средней зарплаты, в таблицу 'high_earners'.

Подзапросы с оператором UPDATE

Обновление данных на основе подзапросов - еще одна мощная функция.

UPDATE employees
SET bonus = salary * 0.1
WHERE department_id IN (
SELECT id
FROM departments
WHERE performance_rating > 8
);

Этот запрос предоставляет премию в размере 10% сотрудникам в высокоэффективных отделах.

Подзапросы с оператором DELETE

Наконец, давайте посмотрим, как подзапросы могут помочь с удалением данных.

DELETE FROM products
WHERE id NOT IN (
SELECT product_id
FROM orders
WHERE order_date > DATE('now', '-1 year')
);

Этот запрос удаляет товары, которые не были заказаны в течение последнего года.

Методы подзапросов

Вот таблица, резюмирующая различные методы, которые мы рассмотрели:

Метод Описание Пример
SELECT с подзапросом Использование подзапроса для фильтрации или вычисления значений для основного запроса SELECT ... WHERE column > (SELECT AVG(...))
Подзапрос в предложении FROM Создание производного стола для запроса SELECT ... FROM (SELECT ...) AS derived_table
INSERT с подзапросом Вставка данных на основе подзапроса INSERT INTO ... SELECT ... WHERE ...
UPDATE с подзапросом Обновление данных на основе подзапроса UPDATE ... SET ... WHERE column IN (SELECT ...)
DELETE с подзапросом Удаление данных на основе подзапроса DELETE FROM ... WHERE column NOT IN (SELECT ...)

Заключение

Поздравляю! Вы только что сделали свои первые шаги в мир подзапросов SQLite. Помните, как обучение езде на велосипеде, овладение подзапросами требует практики. Не отчаивайтесь, если это не сразу срабатывает - продолжайте экспериментировать с различными запросами, и вскоре вы сможете легко писать сложные подзапросы.

Заканчивая, вот小小故事 из моего опыта преподавания: однажды у меня была студентка, которая мучилась с подзапросами. Она сравнила их с русскими матрешками - запросы внутри запросов. Эта метафора помогла ей визуализировать концепцию, и вскоре она стала одной из лучших в классе по написанию подзапросов.

Итак, whether вы видите подзапросы как матрешки или, быть может, как treasure hunt, где каждый запрос带领 вас ближе к призу, продолжайте практиковаться и исследовать. Мир данных обширен и увлекателен, и подзапросы - ваш ключ к разгадке его тайн!

Счастливо работайте с запросами и помните - в мире баз данных,好奇心 - ваш лучший друг. Продолжайте задавать вопросы, и вы найдете ответы!

Credits: Image by storyset