Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Готовые отчеты / Базы данных. Лабораторная работа 2

.pdf
Скачиваний:
41
Добавлен:
29.01.2021
Размер:
370.64 Кб
Скачать

Федеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)

Факультет инфокоммуникационных сетей и систем Кафедра фотоники и линий связи

ЛАБОРАТОРНАЯ РАБОТА №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