SQLite - Подзапросы: Пособие для начинающих
Здравствуйте, будущие программисты! Сегодня мы отправимся в увлекательное путешествие в мир подзапросов SQLite. Не волнуйтесь, если вы новички в программировании - я буду вашим доброжелательным проводником, объясняя все шаг за шагом. Погружаемся!
Что такое подзапросы?
Прежде чем мы углубимся в детали, давайте поймем, что такое подзапросы. Представьте, что вы планируете вечеринку и вам нужно составить список гостей. Вы можете сначала составить список всех своих друзей, а затем сузить его до тех, кто живет поблизости. В 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