proj ИмяМуз (Музыканты join sel
⇐ ПредыдущаяСтр 15 из 15 Инструмент='Кларнет'(Исполнители))
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 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|