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

📖 Теория

📁 Блок: Финальный блок / SQL и MongoDB ⏱️ Время изучения: ~90 мин 🎯 Сложность: Практикум

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

Практикум 20 соединяет две части курса: SQL на базе sakila и MongoDB на коллекции ich.UK_used_cars.

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

Более сложные SQL-задачи требуют найти самого занятого актёра, актёров с более чем 5 фильмами и ранжировать актёров по числу фильмов.

MongoDB-блок повторяет равенство tax: 145, диапазон tax 100-200, логическое OR для tax 145 или 200.

Текстовый поиск ищет слово max в model без учёта регистра через regex /max/i.

Aggregation Pipeline используется для топ-10 частых налогов, списков производителей/моделей без повторов и поиска самых экономичных гибридов.

Главная цель занятия - не выучить новый оператор, а уверенно выбирать подходящий инструмент под задачу.

Топ-3 ошибки: забыть связующую таблицу film_actor, фильтровать агрегаты в WHERE вместо HAVING, написать regex без флага i.

Разбор темы

Почему это практикум

Источник не вводит новую тему: он проверяет, можете ли вы самостоятельно выбрать оператор и собрать запрос из уже изученных блоков.

SQL: начинать с схемы

В sakila фильмы, категории, актёры и языки лежат в разных таблицах. Поэтому перед запросом нужно понять путь связей: film -> film_category -> category или film -> film_actor -> actor.

COUNT и GROUP BY

COUNT(*) считает строки в группе. GROUP BY задаёт, по какому признаку строки собираются вместе: актёр, язык, категория или налог в MongoDB.

Ранжирование актёров

Для ранга по количеству фильмов удобно сначала получить агрегированную таблицу actor_id/count, а затем применить RANK() или DENSE_RANK() по count DESC.

MongoDB: фильтр как документ

В MongoDB условие передаётся как объект: { tax: 145 }, { tax: { $gte: 100, $lte: 200 } }, { $or: [...] }. Это не SQL-строка, а структурированный документ.

Regex по model

Форма /max/i или { $regex: 'max', $options: 'i' } нужна, чтобы найти Max, MAX и max одним условием.

Aggregation Pipeline

Pipeline полезен, когда нужен не просто список документов, а вычисление: сгруппировать, посчитать, отсортировать, ограничить и собрать уникальные значения.

Проверить по документации: дополнительные формы синтаксиса, параметры драйверов и поведение отдельных команд могут отличаться между версиями MySQL, PostgreSQL, SQLite, MongoDB, Compass, Atlas или Python-библиотек. Перед использованием в проекте сверяйте детали с официальной документацией.