Праве зовнішнє з'єднання
Результат правого зовнішнього з'єднання для таблиць А і Б містить всі кортежі з правої таблиці (Б), навіть якщо умова з'єднання не містить збігів з кортежами лівої таблиці (А). Це означає те, що, якщо умова порівняння не знайде записів в таблиці А, то з'єднання в результаті все ж поверне рядки, але значення з колонок таблиці А будуть нульовими. Іншими словами, праве зовнішнє з'єднання повертає всі значення з правої таблиці і додає значення колонок з лівої таблиці або NULL, якщо немає збігу за предикатом з'єднання.
Наприклад, це дозволяє знаходити відділи працівників, але все ж показувати відділи, навіть якщо в них не буде працівників. Результат відрізняється від внутрішнього з'єднання тим, що працівники в неіснуючих відділах відфільтровуються.
Приклад правого зовнішнього з'єднання:
SELECT *
FROM Працівник
RIGHT JOIN Відділ
ON Працівник.КодВідділу = Відділ.КодВідділу
Завдання
Виконати запити до бази даних college згідно завданню з таблиці 1. Результати подати у вигляді змісту запиту, синтаксису запиту та скрін-шоту результату виконання запиту з екрану.
Таблиця 1 – Завдання для виконання
№ з/п |
Зміст запиту: побудувати запит для отримання даних … |
Тип з’єднання |
1. |
про прізвища викладачів та назви спеціальностей на яких працюють викладачі. select lecturer_name, speciality_name from lecturers right join specialities on specialities.id_speciality = lecturers.id_speciality
|
RIGHT JOIN
|
2. |
про аудиторію та назву корпусу, в якому знаходиться аудиторія. select room_number, building_name from rooms NATURAL JOIN buildings
|
NATURAL JOIN
|
3. |
про назви груп та назви спеціальностей. SELECT group_name, speciality_name from groups join specialities using(id_speciality)
|
JOIN USING |
4. |
про викладачів і номер пари, на якій вони задіяні у четверг, відсортувавши по номеру пари (від 1 до 6) select lecturer_name, period_number from scheldule right join lecturers on scheldule.id_lecturer = lecturers.id_lecturer right join periods on scheldule.id_period = periods.id_period where day_name= 'Четвер' order by period_number asc
|
RIGHT JOIN |
5. |
про назви груп та назви спеціальностей. select group_name, speciality_name from groups NATURAL JOIN specialities
|
NATURAL JOIN |
6. |
про прізвища завідувачів відділень та голів циклових комісій. SELECT department_chief, speciality_head from departments join specialities using(id_department)
|
JOIN USING |
7. |
про назви дисциплін та їх тип. select subject_name, type_name from scheldule right join subjects on scheldule.id_subject = subjects.id_subject right join types_of_lessons on scheldule.id_type = types_of_lessons.id_type
|
JOIN ON |
8. |
про прізвища викладачів та назви спеціальностей на яких працюють викладачі. SELECT lecturers.lecturer_name, specialities.speciality_name from lecturers, specialities where specialities.id_speciality = lecturers.id_speciality
|
LEFT JOIN
|
9. |
про викладачів і номер пари, на якій вони задіяні SELECT lecturers.lecturer_name, periods.period_number FROM `scheldule` RIGHT JOIN lecturers ON lecturers.id_lecturer=scheldule.id_lecturer RIGHT JOIN periods ON periods.id_period=scheldule.id_period
|
RIGHT JOIN |
10 |
про назви дисциплін та їх викладачів. SELECT subjects.subject_name, lecturers.lecturer_name FROM `scheldule` LEFT JOIN subjects ON subjects.id_subject=scheldule.id_subject LEFT JOIN lecturers ON lecturers.id_lecturer=scheldule.id_lecturer
|
LEFT JOIN |
11 |
про назви груп 3 курсу та інформацію про пари (номер пари, початок та кінець пари). SELECT groups.group_name, periods.period_number, periods.period_time_start, periods.period_time_end FROM `periods` JOIN scheldule USING (id_period) JOIN groups USING (id_group) WHERE groups.group_name LIKE ('3%')
|
JOIN USING |
12 |
про прізвища викладачів та їх дисципліну, при умові що вони викладають «ЛЕКЦІЇ». SELECT subjects.subject_name, lecturers.lecturer_name FROM scheldule JOIN lecturers ON lecturers.id_lecturer=scheldule.id_lecturer JOIN subjects ON subjects.id_subject=scheldule.id_subject JOIN types_of_lessons ON types_of_lessons.id_type=scheldule.id_type WHERE types_of_lessons.id_type=1
|
JOIN ON |
13 |
про назви груп та назви спеціальностей, відсортувавши за назвою групи SELECT groups.group_name, specialities.speciality_name FROM `groups` RIGHT JOIN specialities ON groups.id_speciality=specialities.id_speciality ORDER BY groups.group_name ASC
|
RIGHT JOIN |
14 |
Побудувати запит для отримання унікальних даних про прізвища викладачів та спеціальностей на яких вони працюють, при умові що вони викладають хоча б одну пару у вівторок. SELECT DISTINCT lecturers.lecturer_name, specialities.speciality_name FROM `scheldule` JOIN lecturers USING (id_lecturer) JOIN specialities USING (id_speciality) WHERE scheldule.day_name='Вівторок'
|
JOIN USING |
15 |
про прізвища викладачів та назви спеціальностей на яких працюють викладачі. SELECT specialities.speciality_name, lecturers.lecturer_name FROM specialities JOIN lecturers ON lecturers.id_speciality=specialities.id_speciality
|
JOIN ON |
16 |
про аудиторію та назву корпусу, в якому знаходиться аудиторія, відсортувавши по номеру аудиторії (від мінімальної до максимальної) SELECT rooms.room_number, buildings.building_name FROM `buildings` RIGHT JOIN rooms ON rooms.id_building=buildings.id_building ORDER BY rooms.room_number ASC
|
RIGHT JOIN |
17 |
про аудиторію та назву корпусу, в якому знаходиться аудиторія, відсортувавши по номеру аудиторії (від максимальної до мінімальної) SELECT rooms.room_number, buildings.building_name FROM `buildings` LEFT JOIN rooms ON rooms.id_building=buildings.id_building ORDER BY rooms.room_number DESC
|
LEFT JOIN |
18
|
про прізвища викладачів та назви спеціальностей на яких працюють викладачі. SELECT lecturers.lecturer_name, specialities.speciality_name FROM specialities JOIN lecturers ON lecturers.id_speciality=specialities.id_speciality
|
JOIN ON |