Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методички по лабам ПрБД, 2 курс 3 семестр (для ИВТ и т.п.) / ПБД_метод к лабам_часть 2_v03 [2022-2023]

.pdf
Скачиваний:
0
Добавлен:
09.10.2025
Размер:
5.5 Mб
Скачать

что созданы все таблицы и в каждой таблице заданы первичные ключи, а во всех дочерних таблицах созданы внешние ключи.

Шаг 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