Методическое руководство преподавателя
ОП.08 Основы проектирования баз данных · Занятие 29
Тема 5. Организация запросов SQL — Понятия SQL. Синтаксис операторов, типы данных
Основание: рабочая программа, §2.2, с. 7–8. Продолжительность: 2 академических часа; регламент занятия — 80 минут, сокращённый — 60 минут. Форма: урок с объяснением теории.
Цели и наблюдаемые результаты
Сформировать представление об SQL как декларативном языке работы с реляционными данными; научить читать типовую форму оператора, различать группы команд и аргументированно выбирать тип столбца. К концу занятия студент объясняет назначение DDL/DML/DQL/DCL/TCL, находит основные части запроса, сопоставляет предметные значения с типами, отличает точное число от приближённого, пишет и объясняет CAST, распознаёт диалектные конструкции.
Связь с программой: знания о языке SQL и средствах проектирования структур БД; умение проектировать реляционные БД и использовать запросы. Компетенции программы: ОК 01, 02, 04, 05, 09, 10; ПК 11.1–11.6.
Подготовка и материалы
Подготовить презентацию (локальный HTML), доску/экран, лекционный конспект и рабочий лист. Для примеров явно объявить учебный диалект PostgreSQL там, где используются ::, JSONB, ARRAY, UUID-функции. Сначала изложить переносимую концепцию SQL; не выдавать специфические имена типов и операторы PostgreSQL за обязательную часть стандарта. Практическая работа здесь — короткие задания на чтение и составление выражений, а не отдельное практическое занятие.
Поминутный регламент — 80 минут
| Минуты | Этап и содержание | Действия преподавателя | Действия студентов | Контроль |
|---|---|---|---|---|
| 0–4 (4) | Организация | Приветствует, проверяет готовность, обозначает тему и маршрут. | Готовят материалы, записывают тему. | Готовность группы. |
| 4–10 (6) | Мотивация, актуализация | Предлагает кейс: цена 0,10 + 0,20; почему денежный тип важен? Спрашивает, чем запрос отличается от программы действий. | Предполагают ответы, вспоминают таблицы, поля, запросы. | Устный блиц. |
| 10–18 (8) | SQL и его развитие | Раскрывает декларативность, назначение стандартов SQL-92, SQL:1999, SQL:2016, совместимость и роль диалектов. | Строят хронологию, фиксируют стандарт/реализацию. | Вопрос: стандарт гарантирует ли одинаковые типы во всех СУБД? |
| 18–27 (9) | Подъязыки | Разбирает DDL, DML, DQL, DCL, TCL на командах; уточняет, что DQL как отдельная учебная категория не выделяется всеми авторами/стандартами одинаково. | Классифицируют CREATE, SELECT, INSERT, GRANT, COMMIT. | Карточки команд. |
| 27–37 (10) | Синтаксис оператора | Показывает ключевые слова, идентификаторы, литералы, выражения, предикаты, опциональные части, разделители и порядок клауз на SELECT. | Размечают структуру, отмечают порядок и точку с запятой. | Совместный разбор. |
| 37–41 (4) | Пауза-разминка | Короткая смена активности; задаёт вопрос на предсказание результата выражения. | Обсуждают с соседом, формулируют ответ. | Наблюдение. |
| 41–56 (15) | Скалярные типы I | Объясняет целые, точные/приближённые числовые, символьные, даты и время; сравнивает точность, диапазон и длину. | Заполняют матрицу выбора типов по предметным примерам. | Обоснование двух решений. |
| 56–65 (9) | Скалярные и специальные типы II | Разбирает BOOLEAN, бинарные, UUID, JSON/JSONB, ARRAY и INTERVAL; подчёркивает зависимость от СУБД. | Отличают скалярность и составные/специализированные типы; отмечают диалект. | Мини-опрос. |
| 65–73 (8) | Приведение типов | Показывает CAST и PostgreSQL ::, неявные преобразования, совместимость типов и ловушки форматирования дат/потери точности. | Проверяют примеры и исправляют ошибочные преобразования. | Разбор 3 фрагментов. |
| 73–78 (5) | Самопроверка и рефлексия | Проводит короткий опрос, просит назвать одно правило выбора типа и одну опасность. | Отвечают, оценивают уверенность. | Ответы по ключу. |
| 78–80 (2) | Итог и резервное ДЗ | Подводит итог, сообщает: домашний файл — только если назначен преподавателем. | Записывают решение преподавателя. | Выходной билет. |
Итого: 80 минут.
Сокращённый регламент — 60 минут
| Минуты | Этап | Методика и действия |
|---|---|---|
| 0–3 (3) | Организация | Проверка готовности, тема и цель. |
| 3–7 (4) | Мотивация | Кейс денежного округления; два вопроса на актуализацию. |
| 7–13 (6) | История и стандарты | Краткая линия SQL-92 → SQL:1999 → SQL:2016; стандарт и реализация. |
| 13–19 (6) | Подъязыки и грамматика | Сопоставление пяти групп команд; схема SELECT. |
| 19–32 (13) | Числа, строки, дата/время | Фокус на точности, длине, временной зоне и выборе предметного типа. |
| 32–34 (2) | Пауза | Короткая смена активности. |
| 34–43 (9) | Логические и специализированные | BOOLEAN, бинарные, UUID, JSONB, ARRAY, INTERVAL; метка PostgreSQL. |
| 43–51 (8) | Преобразование | CAST, ::, неявное приведение, три ошибки на исправление. |
| 51–57 (6) | Закрепление | Два сценария выбора типа и одно преобразование в паре. |
| 57–60 (3) | Итог | Выходной билет и условие резервного задания. |
Итого: 60 минут. При сокращении не исключать выбор типов и приведение; сокращать число демонстраций и устных ответов.
Содержание объяснения
Эволюция и стандарты
SQL (Structured Query Language) — декларативный язык определения структур, манипулирования данными, запросов и управления доступом/транзакциями. SQL-92 (ISO/IEC 9075:1992) закрепил развитое ядро реляционного языка и типовую форму запросов. SQL:1999 (SQL3) добавил объектно-реляционные возможности, рекурсивные запросы и триггеры в стандартизованных частях. SQL:2016 расширил стандарт, в частности стандартизовал возможности работы с JSON. Редакции стандарта не означают, что любая СУБД реализует все возможности; синтаксис, типы и функции различаются.
Классы команд
- DDL — определение схемы: CREATE, ALTER, DROP.
- DML — изменение данных: INSERT, UPDATE, DELETE (в некоторых классификациях сюда относят и SELECT).
- DQL — запросы выборки, обычно SELECT; удобная учебная категория, не универсально самостоятельный нормативный класс.
- DCL — управление привилегиями: GRANT, REVOKE.
- TCL — управление транзакциями: COMMIT, ROLLBACK, SAVEPOINT.
Грамматика и синтаксис
Оператор строится из ключевых слов и обязательных/необязательных клауз, идентификаторов, литералов, выражений и условий. Скобки задают вложенность и приоритет; запятая разделяет элементы списка, точка с запятой обычно завершает оператор. Имена идентификаторов и строковые литералы не взаимозаменяемы.
SELECT [DISTINCT] выражение [, выражение ...] FROM источник [, источник ...] [WHERE условие] [GROUP BY выражение [, ...]] [HAVING условие] [ORDER BY выражение [ASC | DESC] [, ...]]; CREATE TABLE имя ( имя_столбца тип [ограничение] [, ...] ); CAST(выражение AS тип) -- стандартная форма выражение::тип -- PostgreSQL, диалектный сахар
Система типов: что объяснить
| Класс | Типы | Подбор и оговорки |
|---|---|---|
| Целые | SMALLINT, INT/INTEGER, BIGINT | Целые количества; различаются диапазоном и местом хранения в реализации. |
| Точные числа | NUMERIC(p,s), DECIMAL(p,s) | Десятичная точность/масштаб; деньги и расчёты, где важны десятичные значения. Не путать диапазон с количеством знаков после запятой. |
| Приближённые числа | REAL, DOUBLE PRECISION | Числа с плавающей точкой; двоичное представление может давать погрешность. Подходят для измерений/научных вычислений, не для точных сумм. |
| Символьные | CHAR(n), VARCHAR(n), TEXT | CHAR — фиксированная длина с особенностями заполнения; VARCHAR — переменная длина, TEXT — неограниченный/большой текст в конкретной СУБД. Детали пределов и стоимости зависят от реализации. |
| Дата/время | DATE, TIME, TIMESTAMP [WITH TIME ZONE], INTERVAL | Дата без времени; время суток; момент времени; длительность/интервал. Стандартные названия/семантика могут отличаться, особенно часовой пояс. |
| Логический | BOOLEAN | TRUE/FALSE; SQL допускает UNKNOWN вследствие NULL в логических выражениях. |
| Бинарные | BINARY/VARBINARY или BYTEA (PostgreSQL) | Байты, а не текст; конкретное имя зависит от СУБД. |
| Специализированные | UUID, JSON/JSONB, ARRAY | Практически полезны, но переносимость и операции существенно зависят от платформы; JSONB и синтаксис массивов — PostgreSQL. |
Приведение типов
Явное приведение документирует намерение и помогает избежать неоднозначности: CAST('42' AS INTEGER). В PostgreSQL допустимо '42'::INTEGER. Неявное приведение может выполняться по правилам СУБД в выражениях и аргументах функций, но не должно подменять проектный выбор типа. Ошибка/потеря возможны при некорректной строке, переполнении, округлении NUMERIC, потере временной зоны или усечении строки. Формат даты зависит от правил разбора; предпочитать однозначную ISO-форму и проверять тип результата.
Типичные ошибки и педагогические приёмы
- Считать FLOAT точным для денег → демонстрация 0,1 + 0,2 и сравнение с NUMERIC.
- Путать строку и идентификатор → разбор 'DATE' и DATE.
- Хранить дату как VARCHAR → обсуждение сортировки, диапазонов и календарной валидации.
- Считать NULL равным FALSE → таблица истинности с UNKNOWN.
- Называть любой тип «стандартным» → цветовая маркировка SQL-standard / PostgreSQL-specific.
- Предполагать одинаковый синтаксис во всех СУБД → мысленное сравнение переносимого CAST с ::.
- Писать :: в переносимом SQL → требовать назвать целевую СУБД.
- Игнорировать точность/масштаб NUMERIC(p,s) и предел VARCHAR(n) → дать граничные значения.
Приёмы: проблемный вопрос, think–pair–share, карточки «значение → тип → обоснование», код с намеренной ошибкой, проговаривание чтения грамматики, мини-рефлексия «что переносимо / что диалектно».
Формирующее оценивание и ответы
- Какой тип выбрать для точной цены 1250,40? NUMERIC/DECIMAL с достаточными precision/scale.
- Что надёжнее для бинарно-приближённых координат? REAL/DOUBLE PRECISION; допустимая погрешность должна быть осознанной.
- Группа DDL для CREATE TABLE; выборка обычно DQL (или часть широкой трактовки DML); GRANT — DCL; COMMIT — TCL.
- Переносимая явная запись? CAST(expr AS type). :: — PostgreSQL.
- Почему TIME ZONE не то же самое, что дата и время? Смещение/зона влияет на представление/интерпретацию времени; семантика зависит от СУБД.
Оценивать прежде всего обоснование выбора и понимание ограничений, а не механическое запоминание диапазонов, различающихся между СУБД.
Безопасность и доступность
Все примеры автономны, без подключения к внешним сервисам и без ввода реальных персональных данных. При работе на экране увеличить масштаб; ключевые термины озвучивать и фиксировать письменно. Сложные примеры разбирать пошагово, разрешать ответ в виде объяснения вместо быстрого устного блица.