📝 Практикум 3: 20 задач по SQLAlchemy

Базовые запросы (1–10) · Агрегации (11–15) · JOIN и связи (16–20)

⚡ Все 20 задач — кратко

Блок 1 (базовые запросы):

  1. Найти пользователя по имени "Alice"
  2. Вывести всех пользователей старше 20 лет
  3. Обновить возраст "Bob" до 25
  4. Вывести пользователей моложе 30 (имя + возраст)
  5. Добавить пользователя "Charlie" (age=40)
  6. Удалить пользователя "Charlie"
  7. Вывести всех пользователей по убыванию возраста
  8. Первые 4 пользователя в алфавитном порядке
  9. Обновить возраст пользователя с id=5 до 35
  10. Проверить существование пользователя "Charlie"

Блок 2 (агрегации):

  1. Средний возраст всех пользователей
  2. Максимальный и минимальный возраст
  3. Количество пользователей в каждой возрастной группе
  4. Возрастные группы с количеством > 1 (having)
  5. Пользователи старше среднего возраста (subquery)

Блок 3 (JOIN):

  1. Все пользователи вместе с адресами
  2. Пользователи без адресов
  3. Количество пользователей в каждом городе
  4. Пользователи из "Berlin"
  5. Обновить адрес "Bob" на "Paris"

Решения →

Все задачи используют модели 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)

Для задач 11–15 используйте from sqlalchemy import func.

Задача 11: Среднее значение возрастов

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

Задача 12: Максимальный и минимальный возраст

Создайте запрос, который найдёт максимальный и минимальный возраст среди пользователей. Используйте функции func.max() и func.min().

Задача 13: Группировка пользователей по возрасту

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

Задача 14: Фильтрация групп с использованием having()

Измените предыдущий запрос так, чтобы он возвращал только те возрастные группы, где количество пользователей больше 1. Используйте having() для фильтрации результатов агрегации.

Задача 15: Присоединение и подзапросы

Создайте подзапрос, который вычисляет средний возраст пользователей, а затем напишите основной запрос, который выбирает пользователей старше среднего возраста.

Блок 3: Связи и JOIN (задачи 16–20)

Задачи 16–20 используют связь между User и Address (один ко многим). Поле Address.description хранит название города.

Задача 16: Вывод всех адресов пользователей

Напишите запрос, который выводит всех пользователей вместе с их адресами. Выведите имя пользователя и описание адреса.

Задача 17: Пользователи без адресов

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

Задача 18: Подсчёт пользователей в каждом городе

Создайте запрос, который подсчитывает количество пользователей в каждом городе.

Задача 19: Поиск пользователей по городу

Напишите запрос для поиска всех пользователей из определённого города, например, из "Berlin".

Задача 20: Обновление адреса пользователя

Предположим, что нужно обновить адрес пользователя "Bob" на "Paris". Напишите соответствующий запрос.