User(id, name, age) и Address(id, description, user_id). Предполагается, что объект session уже создан. Полную настройку смотри в Теории и Примерах.
Блок 1: Базовые запросы (задачи 1–10)
Задача 1: Поиск пользователя по имени
Напишите запрос, который возвращает пользователя с конкретным именем (например, "Alice"). Если пользователь найден — вывести его имя. Если нет — вывести "User not found".
Задача 2: Вывод пользователей с определённым возрастом
Напишите запрос для вывода всех пользователей, возраст которых больше 20 лет. Выведите только их имена.
Задача 3: Обновление данных пользователя
Допустим, нужно обновить возраст пользователя "Bob" до 25 лет. Напишите запрос для обновления данных. Выведите подтверждение изменения или сообщение "User not found".
Задача 4: Вывод пользователей моложе 30 лет
Напишите запрос для вывода всех пользователей, возраст которых меньше 30 лет. Выведите их имена и возраст.
Задача 5: Добавление пользователя
Напишите запрос, который добавляет пользователя с именем "Charlie" и возрастом 40.
Задача 6: Удаление пользователя
Напишите запрос, который удаляет пользователя с именем "Charlie". Выведите информацию о том, был ли он удалён.
Задача 7: Сортировка пользователей по возрасту
Создайте запрос, который выводит всех пользователей, отсортированных по возрасту в порядке убывания. Выведите имя и возраст каждого.
Задача 8: Вывод пользователей с ограничением количества
Напишите запрос, который выводит первые 4 пользователя, отсортированных по имени в алфавитном порядке.
Задача 9: Обновление данных пользователя по ID
Напишите запрос для обновления данных пользователя, используя его id. Предположим, нужно обновить возраст пользователя с id равным 5 до 35 лет.
Задача 10: Проверка существования пользователя
Напишите запрос, который проверяет, существует ли пользователь с заданным именем. Проверьте наличие пользователя с именем "Charlie".
Блок 2: Агрегации (задачи 11–15)
from sqlalchemy import func.
Задача 11: Среднее значение возрастов
Напишите запрос, который находит средний возраст всех пользователей, и выведите результат.
Задача 12: Максимальный и минимальный возраст
Создайте запрос, который найдёт максимальный и минимальный возраст среди пользователей. Используйте функции func.max() и func.min().
Задача 13: Группировка пользователей по возрасту
Напишите запрос, который группирует пользователей по возрасту и подсчитывает количество пользователей в каждой возрастной группе.
Задача 14: Фильтрация групп с использованием having()
Измените предыдущий запрос так, чтобы он возвращал только те возрастные группы, где количество пользователей больше 1. Используйте having() для фильтрации результатов агрегации.
Задача 15: Присоединение и подзапросы
Создайте подзапрос, который вычисляет средний возраст пользователей, а затем напишите основной запрос, который выбирает пользователей старше среднего возраста.
Блок 3: Связи и JOIN (задачи 16–20)
User и Address (один ко многим). Поле Address.description хранит название города.
Задача 16: Вывод всех адресов пользователей
Напишите запрос, который выводит всех пользователей вместе с их адресами. Выведите имя пользователя и описание адреса.
Задача 17: Пользователи без адресов
Напишите запрос, который выводит пользователей, у которых нет адресов.
Задача 18: Подсчёт пользователей в каждом городе
Создайте запрос, который подсчитывает количество пользователей в каждом городе.
Задача 19: Поиск пользователей по городу
Напишите запрос для поиска всех пользователей из определённого города, например, из "Berlin".
Задача 20: Обновление адреса пользователя
Предположим, что нужно обновить адрес пользователя "Bob" на "Paris". Напишите соответствующий запрос.