Методички по лабам ПрБД, 2 курс 3 семестр (для ИВТ и т.п.) / ПБД_метод к лабам_часть 2_v03 [2022-2023]
.pdf
что созданы все таблицы и в каждой таблице заданы первичные ключи, а во всех дочерних таблицах созданы внешние ключи.
Шаг 1. Рассмотрим две таблицы Книги и Жанр, связанные по атрибуту idЖанр. В phpMyAdmin выбираем таблицу, выбираем режим структуры, выделяем поле, для которого будем делать внешнюю связь и выбираем Индекс (Рис. 19).
Рис. 19 – Добавление нового индекса
Примечание:
Обратите внимание на разницу между Индекс и Уникальный. Уникальный индекс можно использовать, например, для поля id, то есть там, где значения не повторяются.
Это же действие можно сделать с помощью SQL-запроса:
ALTER TABLE `table_name` ADD INDEX ( `field_name` ) ;
Шаг 2. Аналогично добавляем индекс для родительской таблицы для поля id (на которую ссылаемся).
21
Рис. 20 – Добавление нового индекса во вторую таблицу
С помощью SQL-запроса:
ALTER TABLE `table_name` ADD UNIQUE (`field_name`);
Шаг 3. Теперь осталось только связать таблицы. Для этого кликаем внизу на пункт Связи:
Для доступных полей (а доступны только проиндексированные поля) выбираем связь с внешними таблицами и действия при изменении записей в таблицах. После чего нажимаем кнопку Сохранить (Рис. 21).
Через SQL-запрос:
ALTER |
TABLE |
`table_name` |
ADD |
FOREIGN |
KEY |
( |
`field_in_table_name_which_need_connect` ) REFERENCES `outer_table_to_connect` (`outer_field`) ON DELETE RESTRICT ON UPDATE RESTRICT ;
22
Рис. 21 – Добавление связи
2.2.2Связывание таблиц в Дизайнере
phpMyAdmin содержит инструмент под названием Дизайнер. Этот инструмент позволяет упростить работу по созданию таблиц в базе данных и связей между таблицами.
Шаг 1. В левом поле со списком баз данных выберите вашу базу данных.
Шаг 2. Перейдите в меню Ещё и подменю Дизайнер (Рис. 22).
Рис. 22 – Пункт меню Дизайнер
На экране отобразятся таблицы вашей БД (Рис. 23).
23
Рис. 23 – Таблицы БД
Шаг 3. В панели инструмента справа выбираем Показать/Скрыть список таблиц. Слева откроется панель со списком таблиц. Скрыть/показать ненужные таблицы, относящиеся к вашей БД, можно снятием/установкой соответствующей галочки (Рис. 24).
Рис. 24 – Отображение таблиц БД
Шаг 4. Создание связи. Для примера создадим связь между таблицами Клиент и Заказ. Нажимаем Создать связь в панели инструментов. Далее у стрелки появится надпись Выберите ссылочный ключ. Необходимо нажать на первичный ключ таблицы (Рис. 25). В примере это атрибуты
Клиент.idКлиент и Заказ.idКлиент.
24
Рис. 25 – Ссылочный ключ
Шаг 4. Должно отобразится диалоговое окно Создать связь, в котором надо нажать на кнопку ОК (Рис. 26). В результате на ER-модели должна отобразиться новая связь между таблицами (Рис. 27).
Примечания:
Если связь между таблицами не отобразилась, необходимо установить индексы в связываемых таблицах (см. пункт 2.2.1).
Другой причиной, почему выдается сообщение «Связь не создана»: в дочерней таблице уже есть записи, которые отсутствуют в родительской таблице.
Важно: обращайте внимание на направление связи 1:m. Это влияет на корректность ввода записей в таблице в дальнейшем.
25
Рис. 26 – Диалоговое окно подтверждения связи
Рис. 27 – Связь создана
Задание на выполнение лабораторной работы
1)Согласно индивидуальному заданию создать нормализованную БД в phpMyAdmin.
2)Согласно ER-модели задайте связи между сущностями.
26
3)В таблицы необходимо добавить записи. В родительских таблицах должно быть не менее 7 – 10; в дочерних таблицах – не менее 15-20 записей.
4)Подготовьте отчет.
Требования к отчету
Отчет по лабораторной работе оформляется в печатном виде. Защита работы включает в себя проверку знания студентом теоретического материала, а также практической части лабораторной работы. Отчет должен включать краткое описание последовательности шагов выполненной работы с соответствующими скриншотами.
Все примеры должны быть сохранены на учебном сервере или на диске студента.
Лабораторная работа №3. SQL: выборки данных из одной таблицы
Тема: Приобретение практических навыков выполнения SQLзапросов на базе одной таблицы.
Цель лабораторной работы: Приобретение практических навыков использования языка SQL:
−выборка данных из одной таблицы. Выбор отдельных полей таблицы. Использование оператора условия WHERE. Сложные условия (использование OR, AND, NOT);
−создание вычисляемых полей;
−сортировка результатов запроса.
3.1Теоретические сведения
3.1.1Синтаксис оператора SELECT
Оператор SELECT возвращает строки из базы данных и позволяет делать выборку одной или нескольких строк или столбцов из одной или нескольких таблиц. Полный синтаксис инструкции SELECT сложен, однако основные предложения можно вкратце описать следующим образом:
27
Синтаксис оператора SELECT:
SELECT [ALL | DISTINCT] < список столбцов > |*
[INTO имя_новой таблицы]
FROM < список таблиц-источников >
[WHERE < предикат - условие выборки или соединения >]
[GROUP ВУ [ALL] выражение группирования [,... n]
[HAVING < предикат - условие поиска для группы >]
[ORDER ВУ имена столбцов, по которым упорядочивается вывод [ASC | DESC] [,... n]]
[UNION < выражение с оператором SELECT>]
Здесь:
−Ключевое слово ALL означает, что в результирующий набор строк включаются все строки, удовлетворяющие условиям запроса. Это значит, что в результирующий набор могут попасть одинаковые строки. И это нарушение принципов теории отношений (в отличие от реляционной алгебры, где по умолчанию предполагается отсутствие дубликатов в каждом результирующем отношении).
−Ключевое слово DISTINCT означает, что в результирующий набор включаются только различные строки, то есть дубликаты строк результата не включаются в набор.
−Символ * (звездочка) означает, что в результирующий набор включаются все столбцы из исходных таблиц запроса.
−В разделе FROM задается перечень исходных отношений (таблиц) запроса.
−В разделе WHERE задаются условия отбора строк результата или условия соединения кортежей исходных таблиц, подобно операции условного соединения в реляционной алгебре.
−В разделе GROUP BY задается список полей группировки.
−В разделе HAVING задаются предикаты-условия, накладываемые на каждую группу.
28
−В разделе ORDER BY задается список полей упорядочения результата, то есть список полей, который определяет порядок сортировки в результирующем отношении.
−Раздел UNION используется для объединения выходных данных двух или более SQL-запросов в единое множество строк и столбцов.
3.1.2Синтаксис отдельных предикатов раздела WHERE
В данном разделе кратко описаны синтаксисы наиболее популярных предикатов, а также приведены небольшие примеры SQL-запросов.
Предикат нахождения в диапазоне BETWEEN в условии отбора. Его синтаксис:
<выражение> BETWEEN <значение1> AND <значение2>
BETWEEN определяет, входит ли значение <выражения> в указанные границы. Если значение выражения меньше, чем <значение1>, или больше, чем <значение2>, предикат возвращает «ложь».
Пример: Из таблицы Книги вывести название, год издания и тираж книг, стоимость которых находится в интервале от 220 до 250 руб.
SELECT `Название`,`Год издания`,`Тираж`,`Стоимость` FROM `книга` WHERE `Стоимость` BETWEEN 220 AND 250
Рис. 28 – Результат запроса
Создание запроса с выбором, используя предикат вхождения в список IN. Его синтаксис:
<выражение> IN (<список значений>)
29
IN определяет множество значений, с которыми будет сравниваться <выражение>. Предикат считается истинным, если значение выражения равно хотя бы одному из элементов множества.
Пример: Из таблицы Книги вывести название, год издания и тираж книг, изданных в 2016, 2017 и 2019 годах.
SELECT `Название`,`Год издания`,`Тираж`,`Стоимость` FROM `книга` WHERE `Год издания` IN(‘2016’, ‘2017’, ’2019’)
Рис. 29 – Результат запроса
Предикат подобия LIKE. Его синтаксис:
<выражение> LIKE 'образец'
LIKE используется для сравнения строк, применяется только к полям типа CHAR, VARCHAR, использует в образце шаблон, который описывает регулярное выражение с применением следующих символов: '_' – для любого одного символа, '%' – для произвольного количества символов (в том числе и ни одного).
Пример: Из таблицы Книги вывести название и количество страниц детективов, в названии которых встречается слово «убийство».
SELECT `Название`,`Количество страниц` FROM `книга` WHERE `Название` LIKE '%убийство%'
30
