Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Приложение 3. Реляционная алгебра и SQL




 

Рассмотрим, как связаны операции реляционной алгебры и язык SQL, т.е. приведем примеры запросов SQL, аналогичных операциям реляционной алгебры. В качестве примера базы данных будем использовать «Музыкантов».

 

Операция проекции proj выражается через SELECT с ключевым словом DISTINCT.


Получить все названия ансамблей:


proj НазАнс (Ансамбли)

 

SELECT DISTINCT НазАнс FROM Ансамбли


Операция выбора sel выражается через SELECT с ключевым словом WHERE.


Получить данные об ансамблях из России:


sel СтрАнс='Россия' (Ансамбли)

 

SELECT * FROM Ансамбли WHERE СтрАнс='Россия'

 

Условия также могут быть и сложными.

 

Получить имена музыкантов, родившихся в 20-м веке

 

SELECT ИмяМуз FROM Музыканты WHERE ДатаРожд>'31.12.1900' AND ДатаРожд<'01.01.2001'

 

Операция соединения таблиц join может быть выражена несколькими способами.


Получить имена композиторов:


proj ИмяМуз (Музыканты join Сочинения)


Можно использовать связь таблиц через условие WHERE:

 

SELECT DISTINCT ИмяМуз FROM Музыканты М, Сочинения С WHERE С.НомМуз=М.НомМуз

 

Можно использовать более современный синтаксис JOIN... ON

 

SELECT DISTINCT ИмяМуз FROM Музыканты М JOIN Сочинения С ON С.НомМуз=М.НомМуз

 

Если требуется вывести данные из одной таблицы, а условие накладывать на другую таблицу, то удобно использовать подзапросы, связанные и несвязанные.

 

SELECT DISTINCT ИмяМуз FROM Музыканты WHERE НомМуз IN

(SELECT НомМуз FROM Сочинения)

 

или

 

SELECT DISTINCT ИмяМуз FROM Музыканты WHERE НомМуз = Any

(SELECT НомМуз FROM Сочинения)

 

или

 

SELECT DISTINCT ИмяМуз FROM Музыканты М WHERE EXISTS

(SELECT * FROM Сочинения С WHERE

С.НомМуз=М.НомМуз)

 

Приведем пример сложного запроса, использующего данные из всех 6 таблиц базы данных.


Получить названия ансамблей, которые играли Моцарта на саксофоне:

Proj НазАнс

(proj НомСоч (sel ИмяМуз='Моцарт' (Музыканты) join

Сочинения)

Join

Proj НомСоч, НомАнс

(proj НомИсп

(sel Инструмент ='Саксофон' (Исполнители))

Join УчАнс join Исполнения)

Join Ансамбли)

 

SELECT НазАнс FROM Ансамбли WHERE НомАнс IN

(

SELECT И1.НомАнс

FROM Исполнения И1, Исполнители И2, Музыканты М,

Сочинения С, УчАнс У

WHERE И1.НомСоч=С.НомСоч AND С.НомМуз=М.НомМуз AND

И1.НомАнс=У.НомАнс AND И2.НомИсп=У.НомИсп AND

М.ИмяМуз='Моцарт' AND

И2.Инструмент='Саксофон'

)

 

Операция объединения union соответствует нескольким командам SELECT, связанным ключевым словом UNION.


Получить общий список фамилий композиторов и дирижеров:

Proj ИмяМуз (Музыканты join Сочинения)

Union

Proj ИмяМуз (Музыканты join Исполнения)

 

SELECT DISTINCT ИмяМуз FROM Музыканты М, Сочинения С WHERE С.НомМуз=М.НомМуз

UNION

SELECT DISTINCT ИмяМуз FROM Музыканты М, Исполнения И WHERE И.НомМуз=М.НомМуз

 

Операция пересечения intersection может быть выражена несколькими способами.


Получить имена музыкантов, которые играют и на саксофоне, и на кларнете:

Proj ИмяМуз (Музыканты join sel

Инструмент='Саксофон'(Исполнители))

Intersection

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...