Введение в БД и SQL
- О чём это занятие
- От математических оснований — множеств, кортежей и декартова произведения — к реляционным таблицам и языку SQL: уровни DDL и DML, устройство запроса SELECT и проектирование учебной базы данных «Аэропорт», к которой на этой странице подключена живая SQL-песочница.
- Аннотация
- Занятие начинается с определений: база данных, СУБД, различие данных и информации по ГОСТ и четыре шага превращения информации в данные. Затем математический фундамент: множества по Кантору с операциями объединения, пересечения и разности, способы задания множеств, кортежи, мощность и декартово произведение — ровно те понятия, из которых построена реляционная модель. Таблица соответствий связывает термины теории с колонками и строками. Далее — язык SQL: его история и роль на рынке труда, уровни DDL и DML с примерами, шесть операторов классического запроса и разбор условий WHERE. Интерактивный конструктор проверяет знание порядка операторов, а SQL-песочница позволяет выполнять запросы к учебной базе «Аэропорт» прямо на странице. Завершает занятие практическое задание: проектирование пяти связанных таблиц в MS Access — от целей базы до итоговой схемы.
- Пререквизиты
- Занятие 1 — понятия отношения, атрибута, кортежа. Школьные представления о множествах.
- Мотивация
- SQL остаётся обязательным навыком вакансий, связанных с данными: SQL Developer, Data Analyst, Database Administrator, Business Intelligence Analyst. Но выучить синтаксис мало — важно понимать, что за каждым запросом стоит операция над множествами кортежей. Тогда WHERE перестаёт быть заклинанием и становится выборкой, а декартово произведение из учебника — основой JOIN, с которым мы встретимся на следующем занятии.
1. База данных и СУБД
База данных (БД) — это организованная коллекция структурированной информации, или данных, обычно хранящихся в электронном виде в компьютерной системе. База данных обычно управляется системой управления базами данных (СУБД). Вместе данные и СУБД, а также связанные с ними приложения называются системой баз данных, часто сокращённо — просто базой данных.
Данные в наиболее распространённых типах современных баз данных моделируются в виде строк и столбцов в ряде таблиц, чтобы сделать обработку и запрос данных эффективными. К данным можно легко получить доступ, управлять ими, изменять, обновлять, контролировать и организовывать. Большинство баз данных используют структурированный язык запросов (SQL) для записи и запроса данных.
1.1. Данные и информация
Прежде чем углубляться в мир данных, разберёмся в разнице между данными и информацией.
Данные — представление информации в формализованном виде, пригодном для передачи, интерпретации или обработки людьми или компьютерами.
Данные — любой вид знаний о предметах, фактах, понятиях и т. д. проблемной области, которыми обмениваются пользователи информационной системы.
Чтобы информация стала данными, необходимо провести процесс формализации и кодирования:
- Сбор информации — собрать информацию, которую вы хотите преобразовать в данные.
- Формализация — структурировать и организовать информацию: разбить текст на заголовки, абзацы, списки; определить форматы данных (дата, число).
- Кодирование — перевести формализованную информацию в формат, понятный компьютерам: текст в байты кодировки UTF-8, изображение — в JPEG.
- Хранение данных — сохранить закодированные данные в хранилище: жёсткий диск, базу данных, облако.
2. Типы данных
Когда определение данных введено, следует задаться вопросом: как мы можем их хранить? В информатике выделяют два типа данных: скалярные (простые) и составные (структурированные).
Структурированный тип данных — тип, характеристиками которого являются: множественность элементов, его структура, способ доступа к элементам, тип элементов и операции с данными этого типа. Множество значений такого типа определяется множеством значений его элементов и их количеством. Переменная или константа структурированного типа всегда имеет несколько компонент, каждая из которых, в свою очередь, может принадлежать структурированному типу — типы могут вкладываться.
2.1. Множество
Понятие множества является исходным, строго не определяемым понятием. Приведём определение, принадлежащее Георгу Кантору:
«Под многообразием, или множеством я понимаю вообще все многое, которое возможно мыслить как единое, т. е. такую совокупность определённых элементов, которая посредством одного закона может быть соединена в одно целое».
Г. КанторМножества хранят данные без определённого порядка и без повторяющихся значений. Помимо добавления и удаления элементов, есть несколько важных функций, работающих с двумя множествами одновременно. Особенность множества — высокая скорость проверки принадлежности элемента.
Основные операции:
- объединение комбинирует все элементы двух множеств в одно (без дубликатов);
- пересечение создаёт множество из элементов, присутствующих в обоих исходных множествах;
- разность выводит элементы, которые есть в одном множестве, но отсутствуют в другом;
- подмножество выдаёт булево значение: включает ли одно множество все элементы другого.
Множество (set) — контейнер, который может хранить только уникальные значения; применяется для коллекций без дубликатов. Множество может вообще не содержать элементов — тогда его именуют пустым и обозначают ∅. Множество с конечным количеством элементов называют конечным, с бесконечным — бесконечным. Например, множество A = {0, 5, 6, −9} конечно (4 элемента), а множество натуральных чисел N бесконечно.
Способы задания множества
Считают, что множество определяется своими элементами: множество задано, если о любом объекте можно сказать, принадлежит он этому множеству или не принадлежит.
- Перечисление всех элементов. Если множество А состоит из чисел 3, 4, 5 и 6, запись с фигурными скобками: А = {3, 4, 5, 6}.
- Указание условия принадлежности (предикатный способ). A = {a | P(a)}, где P(a) — условие (предикат). Пример: множество положительных действительных чисел — A = {a | a > 0}.
- Порождающая процедура. A = {a | a = F}. Пример: множество из n нечётных положительных чисел — A = {a | a = 2k + 1, k = 0, 1, 2, …, n}.
Кортеж
Кортеж — упорядоченный набор фиксированной длины. Кортежем длины n из элементов множества А называется упорядоченная последовательность ⟨a₁, a₂, a₃, …, aₙ⟩ элементов этого множества.
Мощность множества
Под мощностью конечного множества понимают количество его элементов; мощность множества A обозначается |A|. Примеры:
- мощность объединения двух непересекающихся множеств (A ∩ B = ∅): |A ∪ B| = |A| + |B|;
- мощность объединения в общем случае: |A ∪ B| = |A| + |B| − |A ∩ B|.
Декартово произведение
Прямое, или декартово, произведение двух непустых множеств — множество, элементами которого являются все возможные упорядоченные пары элементов исходных множеств. Пусть даны множества A и B; образуем множество упорядоченных пар, у которых первый элемент принадлежит A, а второй — B. Полученное множество называется декартовым произведением и обозначается A × B.
3. От множества к реляционной БД
Подробнее о типах БД можно узнать из лекционной части (занятие 1). Здесь остановимся на основных концепциях реляционных БД.
В реляционных базах данных кортеж — это элемент отношения. Для N-арного отношения кортеж представляет собой упорядоченный набор из N значений, по одному для каждого атрибута отношения, то есть запись (строку) таблицы, если использовать популярное представление отношения как таблицы.
| Термин | Описание |
|---|---|
| Реляционная модель данных | табличное представление |
| Отношение | реляционная таблица |
| Атрибут | имя столбца |
| Кортеж | строка реляционной таблицы |
| Домен | множество допустимых значений для столбца |
| Степень отношения | число столбцов реляционной таблицы |
| Мощность отношения | число строк реляционной таблицы |
| Реляционная база данных | совокупность взаимосвязанных таблиц |
Реляционная модель данных — модель представления и организации данных в базе, где данные хранятся в виде таблиц из строк и столбцов. Каждая таблица имеет имя и структуру, определяемую набором столбцов и их типами данных.
Таблица — основной объект реляционной модели, хранящий данные в виде строк и столбцов; каждая строка — запись, каждый столбец — конкретное свойство (атрибут) объекта. Столбец — одно поле таблицы, хранящее данные одного типа, с уникальным именем. Строка — одна запись таблицы с данными для каждого столбца; каждая строка имеет уникальный идентификатор — ключ, который может быть составным (из нескольких столбцов).
3.1. В чём разница между базой данных и электронной таблицей?
Базы данных и электронные таблицы (например, Microsoft Excel) — удобные способы хранения информации. Основные различия между ними:
- как хранятся данные и как ими управляют;
- кто может получить доступ к данным;
- какой объём данных может быть сохранён.
Электронные таблицы изначально разрабатывались для одного пользователя, и их характеристики отражают это: они отлично подходят для одного или небольшого числа пользователей, которым не нужно выполнять множество сложных манипуляций с данными. Базы данных, с другой стороны, предназначены для хранения гораздо больших коллекций организованной информации — иногда огромных объёмов. Базы данных позволяют нескольким пользователям одновременно быстро и безопасно получать доступ к данным и запрашивать их, используя сложную логику и язык.
4. SQL (Structured Query Language)
SQL — язык программирования, используемый почти всеми реляционными базами данных для запросов, манипулирования и определения данных, а также для контроля доступа. SQL был впервые разработан в IBM в 1970-х годах при участии Oracle, что привело к внедрению стандарта SQL ANSI. SQL послужил толчком к появлению множества расширений от таких компаний, как IBM, Oracle и Microsoft. Хотя SQL широко используется и сегодня, начинают появляться новые языки программирования.
SQL остаётся одним из самых популярных языков в области баз данных и аналитики. Знание SQL — обязательное требование вакансий, связанных с данными: SQL Developer, Data Analyst, Database Administrator, Business Intelligence Analyst и других. Изучение SQL полезно и тем, кто только начинает путь в ИТ, и опытным профессионалам.
4.1. Структура SQL
Реляционная алгебра — математический аппарат операций с отношениями: выборка, проекция, соединение, пересечение и другие операции над множествами данных (см. операции над множествами выше). SQL — язык, основанный на реляционной модели данных; он расширяет идеи реляционной алгебры, предоставляя более широкий спектр возможностей работы с данными.
Язык SQL отличается от реляционной алгебры, в которой есть лишь операции запросов, тем, что он считается полным языком: помимо операций запросов у него есть операторы, соответствующие DDL (Data Definition Language — язык описания данных), а также операторы административного управления базами данных.
DDL (Data Definition Language)
Операторы DDL используются для создания, изменения и удаления структуры базы данных и её объектов: таблиц, индексов, представлений. Примеры операторов DDL: CREATE, ALTER, DROP, TRUNCATE, RENAME.
CREATE TABLE имя_таблицы (
столбец1 ТИП_ДАННЫХ,
столбец2 ТИП_ДАННЫХ
);
DML (Data Manipulation Language)
Операторы DML позволяют работать с данными внутри таблицы: выборка, вставка, обновление и удаление записей. Примеры операторов DML: INSERT, UPDATE, DELETE.
INSERT INTO имя_таблицы (столбец1, столбец2, ...) VALUES (значение1, значение2, ...);
4.2. Структура SQL-запроса
Классический SQL-запрос состоит из шести самых популярных операторов: два из них обязательные, а другие четыре используются по обстоятельствам:
- SELECT — выбирает отдельные столбцы или всю таблицу целиком (обязательный);
- FROM — из какой таблицы получить данные (обязательный);
- WHERE — условие, по которому SQL выбирает данные;
- GROUP BY — столбец, по которому будут группироваться данные;
- HAVING — условие, по которому сгруппированные данные будут отфильтрованы;
- ORDER BY — столбец, по которому данные будут отсортированы.
SELECT имя_столбца1, имя_столбца2 FROM имя_таблицы WHERE условие GROUP BY имя_столбца HAVING условие ORDER BY имя_столбца ASC
SELECT. Любая команда должна начинаться с ключевого слова — действия, которое должно произойти: выбрать строку, вставить новую, изменить старую или удалить таблицу целиком. SELECT выбирает отдельные столбцы или таблицу целиком, чтобы передать данные другим запросам на обработку.
FROM. Ставится после SELECT и указывает, из какой таблицы или источника данных приходит информация — здесь прописывается имя таблицы, с которой мы хотим работать.
WHERE. Фильтрует данные: после него указывается условие, которому должны удовлетворять строки, чтобы попасть в результат. Условия могут включать:
- сравнения: =, != (не равно), >, <, >=, <=.
Например:
age > 18,name = 'John'; - логические операторы: AND, OR, NOT для комбинирования условий.
Например:
age > 18 AND city = 'New York'; - IN и NOT IN — проверка на вхождение значения в список.
Например:
category IN ('A', 'B', 'C'); - LIKE — поиск по шаблону с символами подстановки: «?» обозначает один символ (в том числе пустой), «*» — большее количество символов;
- NULL и NOT NULL — проверка на наличие или отсутствие значений
NULL. Например:
column IS NULL; - выражения с функциями — арифметика и функции в условиях.
Например:
price * quantity > 100.
4.3. Конструктор: соберите запрос в правильном порядке
Порядок операторов в SQL фиксирован — SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY. Соберите его: щёлкайте по операторам в том порядке, в котором они должны идти в запросе. Ошибётесь — конструктор подскажет.
5. SQL-песочница: база «Аэропорт»
Учебная база данных «Аэропорт» из практического задания уже загружена в песочницу (с небольшим тестовым наполнением). Выполняйте запросы прямо на странице: поддерживаются SELECT, WHERE, ORDER BY, GROUP BY, агрегаты и JOIN двух таблиц. Попробуйте пресеты и напишите собственный запрос с WHERE и LIKE — это пригодится в занятии 3.
DestinationAirports(AirportCode, AirportName) ·
Flights(FlightCode, FlightNumber, DepartureAirport, DestinationAirport, FlightDuration, TicketPrice) ·
Planes(PlaneCode, PlaneType, SeatCount, FlightRange) ·
Departures(DepartureCode, Flight, DepartureTime, Plane, CrewCommander) ·
Passengers(PassengerCode, Departure, SeatNumber, PassengerName, Passport)
· данные тестовые (иллюстративные)
6. Практическое задание
6.1. Этапы работы
Создание базы данных и написание SQL-запросов обычно включает несколько этапов:
- Планирование: определение целей и требований к базе данных; разработка структуры данных и связей; выбор таблиц, полей, типов данных и индексов.
- Создание схемы БД: SQL или специальные инструменты для создания структуры (таблицы, связи, ограничения, индексы).
- Наполнение данными: добавление начальных данных в таблицы.
- Написание SQL-запросов: выборка (SELECT), вставка (INSERT), обновление (UPDATE), удаление (DELETE); запросы DDL для создания и изменения таблиц; запросы DML для управления данными.
- Тестирование: проверка корректности запросов и соответствия ожидаемым результатам; тестирование производительности.
- Оптимизация: анализ и улучшение производительности запросов и структуры базы; добавление индексов.
- Администрирование: регулярное обслуживание, резервное копирование, обновление и обеспечение безопасности данных.
6.2. Учебная БД «Аэропорт»
Цели базы данных:
- хранение информации о рейсах, аэропортах назначения, самолётах и пассажирах;
- связь между данными для эффективного управления информацией о рейсах, вылетах, пассажирах и используемых самолётах;
- обеспечение целостности данных и возможность обновления, удаления и добавления информации.
База данных состоит из пяти таблиц со следующей структурой:
- Таблица «Аэропорты назначения»: код аэропорта (счётчик, первичный ключ); название (текстовый, 30).
- Таблица «Рейсы»: код рейса (счётчик, первичный ключ); номер рейса (числовой, длинное целое); аэропорт вылета (текстовый, 20); аэропорт назначения (внешний ключ, ссылается на таблицу «Аэропорты назначения»); продолжительность полёта (временной); цена билета (денежный, в рублях).
- Таблица «Самолёты» (самостоятельно определите типы, замените знак вопроса): код самолёта (счётчик, первичный ключ); тип самолёта (?); количество мест (?); дальность полёта (?).
- Таблица «Вылеты»: код вылета (счётчик, первичный ключ); рейс (внешний ключ, ссылается на таблицу «Рейсы»); время вылета (дата/время, полный формат даты); самолёт (внешний ключ, ссылается на таблицу «Самолёты»); командир экипажа (текстовый, 20).
- Таблица «Пассажиры»: код пассажира (счётчик, первичный ключ); вылет (внешний ключ, ссылается на таблицу «Вылеты»); номер места (числовой, целое); ФИО (текстовый, 20); паспорт (текстовый, 10, по маске ввода).
Ниже рассмотрено создание данной БД в СУБД MS Access 2016:
- Откройте Microsoft Access 2016.
- Создайте новую базу данных или откройте уже существующую.
- Вкладка «Создание» → «Конструктор запросов» → «Запросы».
- Щёлкните правой кнопкой мыши по запросу и перейдите в режим SQL.
Далее последовательно создайте таблицы по ТЗ.
Таблица «Аэропорты назначения»:
CREATE TABLE DestinationAirports ( AirportCode COUNTER PRIMARY KEY, AirportName TEXT(30) );
Таблица «Рейсы»:
CREATE TABLE Flights ( FlightCode COUNTER PRIMARY KEY, FlightNumber LONG, DepartureAirport TEXT(20), DestinationAirport INTEGER, FlightDuration BYTE, TicketPrice CURRENCY, FOREIGN KEY (DestinationAirport) REFERENCES DestinationAirports(AirportCode) );
Таблица «Самолёты» (заполните типы самостоятельно; например,
PlaneCode COUNTER PRIMARY KEY):
CREATE TABLE Planes (
PlaneCode ДОПИШИТЕ_ТИП,
PlaneType ДОПИШИТЕ_ТИП,
SeatCount ДОПИШИТЕ_ТИП,
FlightRange ДОПИШИТЕ_ТИП
);
Таблица «Вылеты»:
CREATE TABLE Departures ( DepartureCode COUNTER PRIMARY KEY, Flight INTEGER, DepartureTime DATETIME, Plane INTEGER, CrewCommander TEXT(20), FOREIGN KEY (Flight) REFERENCES Flights(FlightCode), FOREIGN KEY (Plane) REFERENCES Planes(PlaneCode) );
Таблица «Пассажиры» (заполните сами типы и ключи):
CREATE TABLE Passengers ( PassengerCode ДОПИШИТЕ_ТИП, Departure ДОПИШИТЕ_ТИП, SeatNumber ДОПИШИТЕ_ТИП, PassengerName ДОПИШИТЕ_ТИП, Passport ДОПИШИТЕ_ТИП, FOREIGN KEY (НАПИШИТЕ_ИМЯ_КОЛОНКИ) REFERENCES Departures(НАПИШИТЕ_ИМЯ_КОЛОНКИ) );
Итоговая схема БД:
7. Хорошие книги для изучения SQL
- «SQL для чайников» Алана Бьюли — популярная книга для начинающих: основы SQL и практические примеры.
- «SQL — язык запросов к базам данных» А. А. Степанова — основы SQL и примеры запросов.
- «SQL. Полное руководство» Александра Кузнецова — обширное руководство: основы языка, запросы, проектирование баз данных и оптимизация производительности.
- «SQL. Сборник рецептов», 2-е изд., Роберт де Грааф и Энтони Молинаро — готовые рецепты для практических задач в СУБД Oracle, DB2, SQL Server, MySQL и PostgreSQL.
Контрольные вопросы
-
Перечисление элементов: А = {3, 4, 5, 6}; предикатный способ — условие принадлежности: A = {a | a > 0}; порождающая процедура: A = {a | a = 2k + 1, k = 0…n}. Множество задано, если о любом объекте можно сказать, принадлежит он ему или нет.
-
Кортеж — упорядоченный набор фиксированной длины: порядок элементов важен, повторения допустимы. Множество не упорядочено и не содержит дубликатов. Строка реляционной таблицы — кортеж, а тело отношения — множество кортежей.
-
|A ∪ B| = |A| + |B| − |A ∩ B|. Элементы, входящие в оба множества, при сложении |A| + |B| посчитаны дважды — вычитание мощности пересечения устраняет двойной счёт. Для непересекающихся множеств |A ∪ B| = |A| + |B|.
-
Отношение — таблица; атрибут — имя столбца; кортеж — строка; домен — множество допустимых значений столбца; степень — число столбцов; мощность — число строк. Реляционная база — совокупность взаимосвязанных таблиц.
-
DDL (Data Definition Language) определяет структуру базы: CREATE, ALTER, DROP, TRUNCATE, RENAME. DML (Data Manipulation Language) работает с данными внутри таблиц: SELECT, INSERT, UPDATE, DELETE. SQL — полный язык: он включает оба уровня плюс административные операторы.
-
SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY. Обязательны SELECT (что выбрать) и FROM (откуда); остальные применяются по обстоятельствам: WHERE фильтрует строки, GROUP BY группирует, HAVING фильтрует группы, ORDER BY сортирует результат.
-
Три различия: способ хранения и управления данными; доступ (БД — многопользовательский, одновременный и безопасный); объём (БД рассчитаны на огромные коллекции). Электронные таблицы созданы для одного пользователя и простых манипуляций.
-
Flights.DestinationAirport → DestinationAirports.AirportCode; Departures.Flight → Flights.FlightCode; Departures.Plane → Planes.PlaneCode; Passengers.Departure → Departures.DepartureCode. Они обеспечивают ссылочную целостность: нельзя создать рейс в несуществующий аэропорт или посадить пассажира на несуществующий вылет.
Источники
- ГОСТ 33707-2016 (ISO/IEC 2382:2015). Информационные технологии. Словарь. — М. : Стандартинформ, 2016.
- Бьюли, А. Изучаем SQL / А. Бьюли. — СПб. : Символ-Плюс, 2007. — 312 с.
- Молинаро, Э. SQL. Сборник рецептов / Э. Молинаро, Р. де Грааф. — 2-е изд. — СПб. : БХВ-Петербург, 2021. — 576 с.
- PostgreSQL 15 Documentation. The SQL Language : [сайт]. — URL: https://www.postgresql.org/docs/15/sql.html (дата обращения: 18.08.2026).