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

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




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

 

SELECT DISTINCT ИмяМуз FROM Музыканты М1,

Исполнители И1, Исполнители И2

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

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

И2.Инструмент='Кларнет' AND

И2.НомМуз=И1.НомМуз

 

или

 

SELECT DISTINCT ИмяМуз

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

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

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

М1.НомМуз IN

(SELECT НомМуз FROM Исполнители И2

WHERE И2.Инструмент='Кларнет')

 

или

 

SELECT DISTINCT ИмяМуз

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

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

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

М1.НомМуз =ANY

(SELECT НомМуз FROM Исполнители И2

WHERE И2.Инструмент='Кларнет')

 

или

 

SELECT DISTINCT ИмяМуз

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

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

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

EXISTS

(SELECT * FROM Исполнители И2

WHERE И2.Инструмент='Кларнет'

AND И2.НомМуз=И1.НомМуз)

 

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


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

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

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

Diffrence

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

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

 

SELECT DISTINCT ИмяМуз

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

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

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

М1.НомМуз NOT IN

(SELECT НомМуз FROM Исполнители И2

WHERE И2.Инструмент='Кларнет')

 

или

 

SELECT DISTINCT ИмяМуз

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

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

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

М1.НомМуз!=ALL

(SELECT НомМуз FROM Исполнители И2

WHERE И2.Инструмент='Кларнет')

 

или

 

SELECT DISTINCT ИмяМуз

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

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

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

NOT EXISTS

(SELECT * FROM Исполнители И2

WHERE И2.Инструмент='Кларнет'

AND И2.НомМуз=И1.НомМуз)

 

Операция умножения product получается, если мы выполняем выборку из 2 таблиц, но не указываем условия связи.


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

Музыканты2 aliases Музыканты

Proj Музыканты.ИмяМуз, Музыканты2.ИмяМуз

(Музыканты product Музыканты2)

 

SELECT М1.ИмяМуз, М2.ИмяМуз

FROM Музыканты М1, Музыканты М2

 

Очень интересно выглядит операция деления division. Она представляет собой двойное отрицание существования.

 

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

Proj НазАнс

(proj НомАнс, НомСоч (Исполнения)

Division

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

Join Сочинения)

Join Ансамбли)

 

SELECT НазАнс FROM Ансамбли А WHERE NOT EXISTS

(

SELECT * FROM Сочинения С, Музыканты М

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

AND NOT EXISTS

(

SELECT * FROM Исполнения И

WHERE И.НомСоч=С.НомСоч AND

И.НомАнс=А.НомАнс

)

)


Литература

 

1. Грабер М. SQL. – М.: Лори. – 2007. – 672 с.

2. ВиейраР.Программирование баз данных Microsoft SQL Server 2005 для профессионалов. М.: Вильямс, Диалектика. – 2008. – 832c.

3. Ульман Дж. Базы данных на Паскале. – М.: Машиностроение. – 1990. – 386 с.

4. Крёнке Д. Теория и практика построения баз данных, 9-е издание. – СПб.: Питер. – 2005. – 900 с.

5. Учебники по SQL Server на сайте Microsoft: http://msdn.microsoft.com/ru-ru/library/ms167593.aspx

 

 

Поделиться:





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



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