Основной вариант — 80 минут
0–4 мин · Организационный этап
Прямая речь преподавателя: «Здравствуйте. Проверьте, пожалуйста, что у вас открыт конспект. Сегодня разберём SQL как язык работы с базой: сначала группы команд и грамматику оператора, затем типы данных и безопасное преобразование. В конце вы сможете обосновать выбор типа для конкретного значения».
Студенты: готовят записи, открывают лекцию. Преподаватель отмечает готовность.
4–10 мин · Мотивация и актуализация
Прямая речь: «Представьте расчёт стоимости: 0,10 + 0,20. Должна ли база хранить деньги приблизительным числом? Вспомните, что такое таблица, поле и запрос. Какими свойствами поля мы управляем при проектировании?»
Ожидаемые ответы: тип, допустимые значения, длина, точность. Принять гипотезы, не раскрывать все ответы заранее.
10–18 мин · Понятие SQL и стандарты
Прямая речь: «SQL расшифровывается Structured Query Language. Это декларативный язык: запрос сообщает, какой результат нужен, а оптимизатор СУБД решает, как его получить. SQL-92 закрепил зрелое общее ядро; SQL:1999, известный как SQL3, добавил ряд объектно-реляционных и процедурных возможностей; SQL:2016 стандартизовал расширенные функции, включая JSON. Но стандарт — не обещание, что любая СУБД реализует всё одинаково. У каждой системы есть свой диалект».
Вопрос: «Если запрос соответствует стандарту, будет ли он обязательно одинаково работать во всех СУБД?» Ожидается: нет, реализация, типы и расширения различаются.
18–27 мин · Классификация команд
Прямая речь: «Разделим команды по назначению. DDL определяет объекты и схему: CREATE, ALTER, DROP. DML меняет строки: INSERT, UPDATE, DELETE. DQL удобно использовать для выборки SELECT, хотя в широкой классификации SELECT иногда включают в DML. DCL задаёт права GRANT/REVOKE; TCL управляет транзакциями COMMIT/ROLLBACK. Назовите группу команды CREATE TABLE».
Студенты: относят примеры к группам; преподаватель уточняет неоднозначность DQL.
27–37 мин · Синтаксис оператора
Прямая речь: «В SQL есть ключевые слова, имена объектов, литералы, выражения и условия. Разберём структуру: SELECT перечисляет, что вывести; FROM задаёт источник; WHERE фильтрует строки; GROUP BY формирует группы; HAVING фильтрует группы; ORDER BY задаёт порядок. Квадратные скобки в грамматической записи показывают необязательную часть — в запрос их не печатают. Одинарные кавычки в строке — это данные, не имя столбца».
SELECT название, цена
FROM товар
WHERE цена > 100
ORDER BY цена DESC;
Действия студентов: называют назначение каждой строки запроса, находят точку завершения.
37–41 мин · Пауза и короткий прогноз
Прямая речь: «Обсудите с соседом: в каком случае 0,1 + 0,2 может дать неожиданное для денежного отчёта представление? Одним предложением сформулируйте причину».
41–56 мин · Числовые, символьные и временные типы
Прямая речь: «Для целых значений есть SMALLINT, INT, BIGINT — выбираем требуемый диапазон. Для точной десятичной суммы используем NUMERIC или DECIMAL с достаточными precision и scale. REAL и DOUBLE PRECISION — приближённые числа с плавающей точкой. Они важны для измерений, где есть допустимая погрешность, но не заменяют точную денежную арифметику. CHAR — фиксированная строка; VARCHAR — переменная с ограничением; TEXT — тип/возможность хранения длинного текста, особенности определяет СУБД. DATE — календарная дата; TIME — время суток; TIMESTAMP — дата и время; INTERVAL — промежуток времени. При выборе времени учитывайте часовую зону и правила своей СУБД».
Студенты: заполняют пары: цена — NUMERIC; код фиксированного формата — CHAR; комментарий — VARCHAR/TEXT; дата рождения — DATE; момент события — TIMESTAMP. Требовать короткое обоснование.
56–65 мин · Логические и специализированные типы
Прямая речь: «BOOLEAN хранит логическое значение, но NULL в условиях SQL создаёт третье значение — UNKNOWN. Бинарные данные — это байты, не строка. UUID служит идентификатором. JSON хранит структурированный документ; PostgreSQL предлагает JSONB и массивы ARRAY. Именно JSONB, запись FLOAT[] и оператор :: в наших примерах — признаки PostgreSQL-диалекта. Не переносите их автоматически в другую СУБД».
Контрольный вопрос: «Является ли JSONB обязательным стандартным типом каждой СУБД?» Ответ: нет.
65–73 мин · Приведение типов
Прямая речь: «Явное преобразование показывает наше намерение и делает код понятнее: CAST('42' AS INTEGER). PostgreSQL допускает короткую форму '42'::INTEGER. Неявное приведение может произойти по правилам СУБД, но оно не исправит плохое проектирование. Строка может оказаться недопустимой; число — переполнить диапазон; дробь — округлиться; время — потерять важные сведения о зоне».
CAST('42' AS INTEGER) -- стандартная форма
'42'::INTEGER -- PostgreSQL
CAST('31/12/2026' AS DATE) -- формат может быть неоднозначенСтуденты: находят риск в последней строке, предлагают ISO-формат и проверку целевой СУБД.
73–78 мин · Закрепление и рефлексия
Прямая речь: «Быстрый выходной билет: 1) класс CREATE TABLE? 2) какой тип у цены с двумя знаками после запятой? 3) как записать стандартное явное преобразование строки '42' в INTEGER? 4) что сообщает ::?»
Ключ: DDL; NUMERIC/DECIMAL; CAST('42' AS INTEGER); PostgreSQL-диалект.
78–80 мин · Итог и резервное задание
Прямая речь: «Сегодня мы связали смысл данных, грамматику SQL и выбор типа. Вспомните правило: сначала определяем смысл и точность значения, потом выбираем тип. Файл домашнего задания резервный: выполняйте его только если я назначил. Срок сообщу отдельно».
Студенты: фиксируют назначение/неназначение и называют одно усвоенное правило.
Сокращённый сценарий — 60 минут
0–3 мин · Организация
Преподаватель: «Сегодня изучим группы SQL-команд, форму оператора, типы и приведение. Откройте лекцию».
3–7 мин · Мотивация
Преподаватель: «Для точной цены подходит ли приближённая дробь? Почему? Сформулируйте гипотезу».
7–13 мин · Стандарты
Преподаватель: «SQL-92 — общее ядро; SQL:1999 расширил язык; SQL:2016 стандартизовал среди прочего JSON-возможности. Стандарт и конкретная реализация не одно и то же».
13–19 мин · Классы и синтаксис
Преподаватель: «CREATE — DDL, INSERT/UPDATE/DELETE — DML, SELECT обычно DQL, GRANT — DCL, COMMIT — TCL. Найдите в примере SELECT, FROM и WHERE. DQL — удобная классификация, в некоторых источниках SELECT считают DML».
19–32 мин · Основные типы
Преподаватель: «SMALLINT/INT/BIGINT — целые; NUMERIC/DECIMAL — точные числа; REAL/DOUBLE PRECISION — приближённые; CHAR/VARCHAR/TEXT — строки; DATE/TIME/TIMESTAMP/INTERVAL — календарные значения и длительность. Сопоставьте цену, имя и дату заказа».
32–34 мин · Пауза
Преподаватель: «Обсудите с соседом одно применение типа интервала».
34–43 мин · Типы PostgreSQL и логика
Преподаватель: «BOOLEAN, бинарные данные, UUID, JSONB, ARRAY. JSONB и массивный синтаксис здесь специфичны для PostgreSQL; UUID и бинарные типы также различаются между системами. NULL даёт UNKNOWN в логических выражениях».
43–51 мин · Приведение
Преподаватель: «Запишите CAST('42' AS INTEGER). Форма ::INTEGER — PostgreSQL. Что пойдёт не так при переполнении, некорректной строке или неоднозначном формате даты?»
51–57 мин · Закрепление
Преподаватель: «Парами выберите точный тип цены, тип даты рождения и способ преобразовать строку числа. Каждое решение обоснуйте одним предложением».
57–60 мин · Итог
Преподаватель: «Назовите одну группу команд, один тип и одну ошибку приведения. Домашнее задание — только при моём назначении; срок сообщу отдельно».