![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
proj ИмяМуз (Музыканты join Сочинения)⇐ ПредыдущаяСтр 13 из 13
Union Proj ИмяМуз (Музыканты join Исполнения)
SELECT DISTINCT ИмяМуз FROM Музыканты М, Сочинения С WHERE С.НомМуз=М.НомМуз UNION SELECT DISTINCT ИмяМуз FROM Музыканты М, Исполнения И WHERE И.НомМуз=М.НомМуз
Операция пересечения intersection может быть выражена несколькими способами.
Proj ИмяМуз (Музыканты join sel Инструмент='Саксофон'(Исполнители)) Intersection 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. Гольцман B. MySQL 5.0. Серия: Библиотека программиста. - СПб.: Питер, 2009. - 256 с. 2. Кузнецов М., Симдянов И. MySQL 5. - СПб: БХВ-Петербург, 2010. 1024 с. 3. Веллинг Л., Томсон Л. MySQL. Учебное пособие. - М.: Вильямс, 2005. - 304 с. 4. Крёнке Д. Теория и практика построения баз данных. 8-е изд. - СПб.: Питер, 2003. - 800 с.
Дистрибутивы http: //www.mysql.com/downloads/installer/ http: //www.devart.com/ru/dbforge/mysql/studio/download.html Для заметок Для заметок |
Последнее изменение этой страницы: 2019-06-19; Просмотров: 224; Нарушение авторского права страницы