Готовые отчеты / Базы данных. Лабораторная работа 2
.pdfФедеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)
Факультет инфокоммуникационных сетей и систем Кафедра фотоники и линий связи
ЛАБОРАТОРНАЯ РАБОТА №2 по дисциплине «Базы данных»
на тему «Объединение таблиц с помощью оператора JOIN в MySQL»
Выполнили: студенты 3-го курса дневного отделения группы ИКПИ-85 Ежуров Антон Павлович
Коваленко Леонид Александрович Преподаватель:
ассистент кафедры ПИиВТ Овчинников Антон Олегович
Санкт-Петербург
2020
Цель работы Получить практические навыки создания запросов на внутренние и
внешние объединения таблиц на языке SQL. Ход работы
Создадим базу данных university в программе-дизайнере MySQL Workbench. В этой базе данных создадим таблицу departments с полями:
1.id типа INT, первичный ключ (PK), счетчик (AI);
2.name типа VARCHAR, ненулевое (NN).
Заполним таблицу departments произвольными пятью записями (табл.
1).
Таблица 1 — Таблица departments базы данных university
id |
name |
|
|
1 |
Департамент бизнес-аналитики |
|
|
2 |
Департамент гуманитарных наук |
|
|
3 |
Департамент математики |
|
|
4 |
Департамент политологии |
|
|
5 |
Департамент управления бизнесом |
В базе данных university создадим таблицу users с полями: 1. id типа INT, первичный ключ (PK), счетчик (AI);
2. name типа VARCHAR, ненулевое (NN);
3. department_id типа INT.
Заполним таблицу users произвольными семью записями (табл. 2):
1.Пять строк таблицы users будут содержать в поле department_id какое-либо уникальное число из поля id таблицы departments;
2.Две строки из таблицы users будут содержать в поле department_id числа, не используемые в строках таблицы departments в поле id.
Таблица 2 — Таблица users базы данных university
id |
name |
department_id |
|
|
|
1 |
Алексей |
1 |
|
|
|
2 |
Михаил |
2 |
|
|
|
3 |
Елена |
3 |
|
|
|
4 |
Василий |
4 |
|
|
|
2
5 |
Владимир |
5 |
|
|
|
6 |
Александр |
6 |
|
|
|
7 |
Виктор |
7 |
Сохраним созданную в программе-дизайнере схему базы данных на локальный компьютер.
Запустим генерацию базы данных на сервере MySQL (Пункт меню: Database → Forward Engineer). В опциях поставим галки напротив пунктов
Generate INSERT statements for tables и DROP objects before each CREATE object.
Подключимся к базе данных MySQL (команда mysql -u root -p) и активизируем базу данных university (команда use university).
Выполним SQL-команду (рис. 1):
SELECT users.id, users.name, departments.name FROM users INNER JOIN departments ON users.department_id=departments.id;
Рисунок 1 — Результат INNER JOIN Выполним SQL-команду (рис. 2):
SELECT users.id, users.name, departments.name FROM users LEFT JOIN departments ON users.department_id=departments.id;
Рисунок 2 — Результат LEFT JOIN 3
Выполним SQL-команду (рис. 3):
SELECT users.id, users.name, departments.name FROM users RIGHT JOIN departments ON users.department_id=departments.id;
Рисунок 3 — Результат RIGHT JOIN Выполним SQL-команду (рис. 4):
SELECT users.id, users.name, departments.name FROM users CROSS JOIN departments;
Рисунок 4 — Результат CROSS JOIN Выводы
Внутреннее объединение таблиц — INNER JOIN — объединяет записи, если в связующих полях этих таблиц содержатся одинаковые значения.
4
Левое объединение таблиц — LEFT JOIN — объединяет все записи первой (левой) таблицы со второй (правой). Несоответствующие записи принимают значение NULL.
Правое объединение таблиц — RIGHT JOIN — объединяет все записи второй (правой) таблицы с первой (левой). Несоответствующие записи принимают значение NULL.
Декартово произведение таблиц — CROSS JOIN — объединяет каждую строку первой (левой) таблицы с каждой строкой второй (правой) таблицы.
5