Вы находитесь на странице: 1из 10

Министерство образования, культуры и исследований Республики

Молдова
Технический университет Молдовы
Департамент программной инженерии и автоматики

Отчет
по лабораторной работе №8
Тема: Реализация операций реляционной алгебры в SQL.

Выполнил: Студент группы TI-186 Лях Аркадий


Проверил: Преподаватель Саранчук Дориан

Кишинев 2020
Цель работы:
Научиться выражать операции реляционной алгебры средствами SQL.
Задания к лабораторной работе:
Задание 1. Реализация теоретико-множественных операций над
отношениями в SQL
1.Напишите в SQL запросы для каждой из теоретико-множественных
операций над отношениями (объединение, пересечение, разность,
декартово произведение, активное дополнение).
--Вывести ID_сотрудника у которых дата рождения больше 1999-01-14 или состоящих в
проекте GoodApp
USE Sotrudniki
SELECT ID_сотрудника
FROM Персонал WHERE Дата_рождения > '1999-01-14'
UNION SELECT ID_сотрудника
FROM Участники_Проекта WHERE Название_проекта= 2
ORDER BY ID_сотрудника

--Вывести ID вида проекта, который больше 1 и название которого начинается на Б


SELECT ID_вида_проекта
FROM Проект
INTERSECT SELECT ID_вида_проекта
FROM Виды_Проекта
WHERE ID_вида_проекта >1 and Название_проекта like N'Б%'
GO

--Вывести ID Проекта ,который был сформирован позже 3 сентября 2018 года


SELECT ID_проекта
FROM Участники_Проект
EXCEPT SELECT ID_проекта
FROM Проект
WHERE Дата_формирования > '2018-09-03'
GO

--Вывести данные если бы весь персонал учавствовали в каждом проекте


SELECT *
FROM Проект,Персонал
ORDER BY Название_Проект
GO

--Вывести все комбинации ID cотрудников и ID проекта,кроме уже сущетсвующих


SELECT DISTINCT p2.ID_сотрудника,p1.ID_проекта
FROM Участники_ПроектаAS p1, Участники_ПроектаAS p2
EXCEPT
SELECT * FROM Участники_Проект
GO

2. Напишите запрос, реализующий операцию декартово произведение


отношения с самим собой, используя для этого переименование
атрибутов.
--Декартово произведение отношения самим с собой с переименовкой атрибутов
SELECT p1.*, p2.ID_Директора AS ID_Директора_test,
p2.ФИО_Директора AS ФИО_Директора_test,
p2.Пол_Директора AS Пол_Директора_test,
p2.Адрес_Директора AS Адрес_Директора_test,
p2.Номер_телефона AS Номер_телефона_test
FROM Директора AS p1, Директора AS p2
Задание 2. Реализация в SQL специальных реляционных операций
Напишите запросы для каждой из специальных операций реляционной
алгебры (селекция, проекция, деление, естественное соединение, тета-
соединение, экви-соединение, самосоединение, полусоединение, внешнее
соединение трех типов).
Селекция
--Вывести данные о сотрудниках имена которых начинаются на А и которым 21 год на
данный момент
SELECT *
FROM Персонал
WHERE Дата_рождения > '1998-12-12' and Имя_сотрудника like N'а%'
ORDER BY ID_сотрудника
GO

Проекция
--Вывести имя и фамилии каждого сотрудника
SELECT Имя_сотрудника,Фамилия_сотрудника
FROM Персонал
ORDER BY Имя_сотрудника
GO
Деление
SELECT *
INTO #TEST
FROM Проект,Персонал
WHERE ID_проекта<4
ORDER BY Название_Проект
GO
--Вывести название проекта если его id меньше 4
SELECT DISTINCT #TEST.ID_проекта,#TEST.Название_Проект
FROM #TEST
WHERE NOT EXISTS (SELECT * FROM #TEST AS Проект
WHERE NOT EXISTS(SELECT * FROM #TEST AS Персонал
WHERE Персонал.Название_проекта= #TEST.Название_проектаAND Персонал.ID_сотрудника =
Проект.ID_сотрудника))
GO

Естественное соединение
--Вывести список директоров ,за которыми закреплены проекты для разработки
USE Sotrudniki
SELECT Директора.*, Проект.Название_Проект, Проект.ID_проекта
FROM Директора inner join Проект ON Директора.ID_Директора=Проект.ID_Директора
ORDER BY ID_проекта
GO

Тета-соединение
--Вывести все данные о проектах и сотрудниках в них участвующих,кроме Quest и
PocariSweat
SELECT *
FROM Проект,Персонал
WHERE ID_проекта>2
ORDER BY Название_Проект
GO
Экви-соединение
--Вывести все данные о проектах и сотрудниц в них участвующих
SELECT *
FROM Проект,Персонал
WHERE Пол_Проект=N'женский'
ORDER BY Название_Проект
GO

Самосоединение
--Вывести имена и фамилии сотрудников,у которых одинаковые имена
SELECT Персонал.Имя_сотрудника,Персонал.Фамилия_сотрудника
FROM Персонал AS Персонал, Персонал AS Персонал1
WHERE Персонал.Фамилия_сотрудника<>Персонал1.Фамилия_сотрудника AND
Персонал.Имя_сотрудника=Персонал1.Имя_сотрудника
ORDER BY Персонал.Имя_сотрудника
GO
Полусоединение
--Вывести список директоров,за которыми закреплены проекты для разработки
SELECT Директора.*
FROM Директора, Проект
WHERE Директора.ID_Директора=Проект.ID_Директора
ORDER BY ID_Директора

Внешнее соединение трех типов


--левое соединение
--Вывести данные обо всех Директорах и проектах,если нет соответствий то будет
значение NULL
SELECT Директора.*,Проект.*
FROM Директора LEFT JOIN Проект ON Проект.ID_Директора=Директора.ID_Директора
GO

--правое соединение
--Вывести все данные о проектах,у которых есть или нет директора,если нет соответствий
то будет значение NULL
SELECT Проект.*,Директора.*
FROM Директора RIGHT JOIN Проект ON Проект.ID_Директора=Директора.ID_Директора
GO

--полное соединение
--Вывести всю инорфмацию о директорах и проектах,если нет соответствий то будет
значение NULL
SELECT Директора.*,Проект.*
FROM Проект FULL OUTER JOIN Директора ON Проект.ID_Директора=Директора.ID_Директора
GO

Задание 3. Реализация реляционных операций альтернативными методами


Реализуйте каждую из операций реляционной алгебры разными методами,
разными синтаксисами (если это возможно).
--Аналог пересечения
--Вывести ID вида проекта,которого больше 1 и название которого начинается на Б
SELECT ID_вида_проекта
FROM Проект
WHERE ID_вида_проекта IN(
SELECT ID_вида_проекта
FROM Виды_Проекта
WHERE ID_вида_проекта >2 and Название_проекта like N'Б%')
GO

--Аналог разности
--Вывести ID Проект,исключив ту,которая была сформирована позже 3 сентября 2018 года
SELECT DISTINCT ID_проекта
FROM Участники_Проект
WHERE Название_проектаNOT IN(
SELECT ID_проекта
FROM Проект
WHERE Дата_формирования > '2018-09-03')
GO
--Аналог декартового произведения
--Вывести данные если бы весь персонал учавствовали в каждом проекте
SELECT Проект.*,Персонал.ID_сотрудника as
id_сотрудника,Персонал.Пол_сотрудника,Персонал.Адрес_сотрудника,Персонал.Дата_рождения
,
Персонал.Фамилия_сотрудника,Персонал.Имя_сотрудника
FROM Проект,Персонал
ORDER BY Название_Проект
GO

--Аналог естественного соединения


--Вывести список директоров,за которыми закреплены проекты для разработки
USE Sotrudniki
SELECT Директора.*, Проект.Название_Проект, Проект.ID_проекта
FROM Директора,Проект
WHERE Директора.ID_Директора=Проект.ID_Директора
ORDER BY ID_проекта
GO

--Аналог полусоединения
--Вывести список директоров,за которыми закреплены проекты для разработки
SELECT Директора.*
FROM Директора INNER JOIN Проект
ON Директора.ID_Директора=Проект.ID_Директора
ORDER BY ID_Директора
GO
Выводы:
В результате выполнения данной лабораторной работы я научился
выражать операции реляционной алгебры средствами SQL.