← К оглавлению занятия

🏠 Домашнее задание

📁 Блок: SQL / SQLite / Google Colab ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя

⚡ Кратко: суть занятия

SQLite — лёгкая реляционная база данных без отдельного сервера: в Colab она хранится в обычном файле .db.

В Python подключение создаётся через sqlite3.connect('example_database.db'), а запросы выполняются через курсор или pandas.

Для изменений нужен conn.commit(): без него таблица или вставленные строки могут не сохраниться.

Минимальный пример: создать DataFrame, записать его через df.to_sql('employees', conn, if_exists='replace', index=False), затем прочитать через pd.read_sql_query().

SQL-запросы из занятия повторяют базовые действия: SELECT *, фильтр WHERE, сортировку ORDER BY, AVG и COUNT.

pandas удобен как мост: таблица живёт в DataFrame, а SQLite даёт возможность тренировать обычный SQL.

Топ-3 ошибки: забыть commit(), записать лишний индекс в таблицу, вставлять значения строкой вместо параметров ?.

Домашнее задание из LMS

База данных с доступом на чтение:

  • hostname: ich-db.edu.itcareerhub.de
  • username: ich1
  • password: password
  1. Выберите только те строки из таблицы suppliers, где company имеет значение Supplier A.
  2. Выведите все строки там, где purchase_order_id не указано. Дополнительно создайте столбец total_price как quantity * unit_price.
  3. Выведите, какая дата будет через 51 день.
  4. Посчитайте количество уникальных заказов purchase_order_id.
  5. Выведите все столбцы таблицы order_details и дополнительный столбец payment_method из purchase_orders. Оставьте только заказы, для которых известен payment_method.

Пошаговое решение

SELECT *
FROM suppliers
WHERE company = 'Supplier A';

SELECT *, quantity * unit_price AS total_price
FROM order_details
WHERE purchase_order_id IS NULL;

SELECT CURRENT_DATE + INTERVAL 51 DAY AS date_after_51_days;

SELECT COUNT(DISTINCT purchase_order_id) AS unique_purchase_orders
FROM order_details;

SELECT od.*, po.payment_method
FROM order_details AS od
JOIN purchase_orders AS po
    ON po.id = od.purchase_order_id
WHERE po.payment_method IS NOT NULL;

Проверяйте каждое задание отдельно: сначала строки фильтрации, затем вычисляемые столбцы и только после этого соединение таблиц.

Проверить по документации. Для SQLite аналог вычисления даты отличается: обычно используют date('now', '+51 days'). Это не часть LMS-задания, а перенос идеи на SQLite.