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

Технический Университет Молдовы

Факультет Вычислительной Техники, Информатики и


Микроэлектроники

Кафедра Автоматики и Информационных Технологий

Отчёт
по лабораторной работе № 7

по дисциплине «BDC»

Тема: «Реализация операций реляционной алгебры в SQL»

Выполнил: студент группы TI-113 Карабаш Артём

Проверила: старший преподаватель Булай Родика

Кишинев 2013
ЛАБОРАТОРНАЯ РАБОТА № 7

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


Цель работы:
Научиться выражать операции реляционной алгебры средствами SQL.

Задания к лабораторной работе:


Задание 1. Реализация теоретико-множественных операций над отношениями в SQL
1. Напишите в SQL по 2 запроса для каждой из теоретико-множественных операций
над
отношениями (объединение, пересечение, разность, декартово произведение).
2. Напишите запрос, реализующий операцию декартово произведение отношения
самим с
собой, используя для этого переименование атрибутов.
Задание 2. Реализация в SQL специальных реляционных операций
Напишите по одному запросу для каждой из специальных операций реляционной
алгебры
(селекция, проекция, деление, естественное соединение, тета-соединение, экви-
соединение,
самосоединение, полусоединение, внешнее соединение).

Выполнения задания:
Задание 1. Реализация теоретико-множественных операций над отношениями в SQL
1. Напишите в SQL по 2 запроса для каждой из теоретико-множественных операций
над
отношениями (объединение, пересечение, разность, декартово произведение).

Объединение
Найти Фамилии спортсменов старше 29 лет или спортсменов из команды Катюша:
USE [ProCyclingTeam]
SELECT ФамилияИмя
FROM спортсмены
WHERE Возраст>29
UNION
SELECT ФамилияИмя
FROM спортсмены
WHERE Команда ='Катюша%'

Найти фамилии тренеров старше 50 или с машиной с номерами начинающиеся на CLS:


USE [ProCyclingTeam]
SELECT ФамилияИмя
FROM тренер
WHERE Возраст>50
UNION
SELECT ФамилияИмя
FROM тренер
WHERE Авто LIKE'CLS%'

Пересечение
Вывести имена спортсменов старше 21 года и владеющие велосипедом Bianchi:
USE [ProCyclingTeam]
SELECT ФамилияИмя
FROM спортсмены
WHERE Возраст>21
INTERSECT
SELECT ФамилияИмя
FROM владельцы_велосипедов
WHERE НаименованиеВелосипеда LIKE 'Bianchi'

Вывести фамилию спортсмена который старше 25 лет и имеет тренера по имени Петров Василий:
USE [ProCyclingTeam]
SELECT ФамилияИмя
FROM спортсмены
WHERE Возраст>25
INTERSECT
SELECT ФамилияИмя
FROM спортсмены
WHERE Тренер ='Петров Василий'

Разность
Вывести фамилии спортсменов младше 25 кроме тех у которых нет тренера:
USE [ProCyclingTeam]
SELECT ФамилияИмя
FROM спортсмены
WHERE Возраст<25
EXCEPT
SELECT ФамилияИмя
FROM спортсмены
WHERE Тренер IS NULL

Вывести фамилии спортсменов из команды Омега кроме тех у кого тренер Иванов А.:
USE [ProCyclingTeam]
SELECT ФамилияИмя
FROM спортсмены
WHERE Команда = 'Омега'
EXCEPT
SELECT ФамилияИмя
FROM спортсмены
WHERE Тренер LIKE 'Иванов Александр'

Декартово произведение
USE [ProCyclingTeam]
SELECT *
FROM спортсмены, велосипеды
USE [ProCyclingTeam]
SELECT *
FROM спортсмены, велосипеды

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


самим с собой, используя для этого переименование атрибутов.
USE [ProCyclingTeam]
SELECT тренер.*, trainer.ФамилияИмя AS FirstName,
trainer.Возраст AS AGE,
trainer.Авто AS Auto
FROM тренер AS trainer, тренер
Задание 2. Реализация в SQL специальных реляционных операций
Напишите по одному запросу для каждой из специальных операций реляционной
алгебры
(селекция, проекция, деление, естественное соединение, тета-соединение, экви-соединение,
самосоединение, полусоединение, внешнее соединение).
Селекция
USE [ProCyclingTeam]
SELECT Марка, Пробег
FROM авто
WHERE Пробег >10000
ORDER BY Марка

Проекция
USE [ProCyclingTeam]
SELECT ПолноеНаименование, Материал
FROM велосипеды

Деление
SELECT DISTINCT тренер.ФамилияИмя, тренер.Авто
FROM тренер
WHERE EXISTS (SELECT *
FROM авто
WHERE тренер.Авто = авто.Номер)
Естественное соединение:
SELECT ФамилияИмя, Авто
FROM тренер, авто
WHERE тренер.Авто = авто.Номер

Тета-соединение
SELECT спортсмены.ФамилияИмя,спортсмены.Возраст,
владельцы_велосипедов.НаименованиеВелосипеда
FROM спортсмены, владельцы_велосипедов
WHERE спортсмены.ФамилияИмя = владельцы_велосипедов.ФамилияИмя

Экви-соединение
SELECT спортсмены.*, владельцы_велосипедов.*
FROM спортсмены, владельцы_велосипедов
WHERE спортсмены.ФамилияИмя = владельцы_велосипедов.ФамилияИмя
Полусоединение
SELECT спортсмены.ФамилияИмя
FROM спортсмены join владельцы_велосипедов
ON спортсмены.ФамилияИмя = владельцы_велосипедов.ФамилияИмя

Внешнее соединение
SELECT спортсмены.ФамилияИмя
FROM спортсмены right outer join владельцы_велосипедов
ON спортсмены.ФамилияИмя = владельцы_велосипедов.ФамилияИмя
Вывод: В ходе выполнения данной лабораторной работы был изучен процесс построения
запросов с помощью Transact-SQL, которые реализуют специальные реляционной алгебры
и реляционные операции. Были написаны запросы для операций объединения,
пересечения, разности, декартового произведения, операций селекции, проекции, тэта-
соединения, экви-соединения, естественного соединения, полу-соединения, само-
соединения, внешнего соединения, деления.