Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт_з_практики.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.1 Mб
Скачать

5. Об’єднання таблиць Теоретичні відомості

При нормалізації БД створюється багато таблиць. При вибірці да­них з БД часто потрібні дані містяться в кількох таблицях, пов'язаних між собою за допомогою спільних полів і відношень між ними. Для того, щоб виорати дані з кількох таблиць і мати можливість використо­вувати при цьому засоби SQL для обробки даних (фільтрації, пошуку, групування, використання агрегатних функцій тощо) використовують об єднання кількох таблиць в одну, згідно з певними критеріями. Ре­зультат об’єднання існує тільки yfмомент виконання запиту.

Повне ім’я стовпця складається з імені таблиці і власне імені стовпця, яке пишеться після імені таблиці і відділяється від нього крапкою. Наприклад:

Students,courseFaculty,Name Speciality.ID

При виборі однієї таблиці в іменах стовпців не вказують імені таб­лиці — джерела даних. При об’єднанні таблиць часто трапляється, що різні таблиці мають поля з однаковими іменами. Щоб СУБД могла розрізнити такі поля, при виконанні запиту слід використовувати повне ім’я поля.

Об’єднання таблиць дозволяє робити конструкція JOIN. Вона може мати один з таких форматів:

SELECT

FIELD [,... n]

FROM

Table1

{INNER | {LEFT | RIGHT | FULL} OUTER | CROSS } JOIN

Table2

ON <condition>

або при перехресному з’єднанні (CROSS JOIN)

SELECT

FIELD [,... n]

FROM

Table1,

Table2

Практичні завдання

Примітка. Завдання виконувати в базі даних univer.

  1. Додати в таблицю specialityнове поле faculty_id.

Перейти до БД univer, та прописати SQL запит, щоб додати нове поле у таблицю

ALTER TABLE `speciality` ADD `faculty_id` INT(10) NOT NULL

  1. За повнити поле faculty_id відповідно до факультетів.

Щоб заповнити поле faculty_id відповідно до факультетів, використовуємо UPDATE та вносимо SQL-запит:

UPDATE `univer`.`speciality` SET `faculty_id` = '1' WHERE `speciality`.`id` =1

UPDATE `univer`.`speciality` SET `faculty_id` = '2' WHERE `speciality`.`id` =2

UPDATE `univer`.`speciality` SET `faculty_id` = '3' WHERE `speciality`.`id` =3

UPDATE `univer`.`speciality` SET `faculty_id` = '4' WHERE `speciality`.`id` =4

UPDATE `univer`.`speciality` SET `faculty_id` = '5' WHERE `speciality`.`id` =5

UPDATE `univer`.`speciality` SET `faculty_id` = '6' WHERE `speciality`.`id` =6

UPDATE `univer`.`speciality` SET `faculty_id` = '7' WHERE `speciality`.`id` =7

  1. До таблиці faculty додати новий факультет.

Так як у нас записаний точний шлях до таблиць, SQL-запит ми можемо виконувати будь звідки.

INSERT INTO `univer`.`faculty` (`id`,`name`) VALUES ('4', 'Юридичний факультет');

  1. До таблиці speciality додати за допомогою SQL-запиту нову спеціальність не пов’язану із жодним факультетом.

Щоб додати нову спеціальність і щоб вона не була пов’язана із жодним факультетом, використовуємо INSERT

INSERT INTO `univer`.`speciality` (`id`,`name`) VALUES ('8', 'Конструкція літаків');

  1. Із таблиць students та faculty,бази даних univer, вивести список студентів, що складається з двох полів: імені студента і факультету, на якому він навчається.

Ввійти до БД univer та у пункті меню SQL записати таке:

SELECT students.name, faculty.name

FROM `students`

INNER JOIN `faculty` ON students.faculty_id=faculty.id

  1. Із таблиць students та speciality вивести список студентів, що складається з двох полів: імені студента і спеціальності, на якій він навчається.

Майже так само виконуємо як і попереднє завдання, тільки заміняємо факультет на спеціальність.

SELECT students.name, speciality.name

FROM `students`

INNER JOIN `speciality` ON students.speciality_id=speciality.id

  1. Із таблиць faculty та speciality вивести всю інформацію, почерзі використовуючи наступні запити:

1

2

3

4

5

6

7

  1. Зробити висновки про отримані результати та роботу оператора join.

Функція join дозволяє зменшити обєм даних при необхідності вибірки з декількох таблиць бо дозволяє задати умови за якими повязуються дані з цих таблиць відтворюючи таким чином звязки кортежів у базі даних.