Порядок выполнения работы. Теоретические сведения

Теоретические сведения

Подзапрос – это выражение, приписывающее значение отношению.

Подзапрос порождает скалярное значение. Рассмотрим случай, когда подзапрос порождает скалярное значение –единственное значение атрибута. В этом случае в пункте WHERE происходит сравнение двух скалярных значений. При этом атрибут часто является ключом отношения. Для выполнения сравнения используются операторы > , < , = , >= , <= . Например используя подзапрос, выполним поиск режиссера спектакля “Macbeth” . Для этого используем отношения:

Performances(title, year, runningTime, type, theatreName, composer, producerC#)

Producers(name, address, cert#, networth)

В первом отношении содержатся названия спектаклей, а во втором – имена режиссеров. Запрос имеет следующий вид:

SELECT name

FROM Producers

WHERE cert#=

( SELECT Producer#

FROM Performances

WHERE title=’Macbeth’).

Рассмотрим случай, когда условие, указанное в пункте WHERE, выполняется сравнение кортежа, имеющего единственный атрибут, и унарного отношения. Отношение представляется множеством значений единственного атрибута. Кортеж t можно сравнивать с отношением R, при этом условие сравнения может содержать операторы > , < , = , >= , <= и ключевые слова IN,ANY,ALL.

Условие t IN R истинно тогда и только тогда, когда t совпадает с одним из кортежей R. Условие t NOT IN R истинно, когда t не совпадает ни с одним кортежем R и R – унарное отношение.

Условие t > ALL R истинно тогда и только тогда, когда t больше любого значения унарного отношения R. Условие t <> ALL R эквивалентно t NOT IN R.

Условие t > ANY R истинно тогда и только тогда, когда t больше по крайней мере одного из значений унарного отношения R. Условие t = ANY R эквивалентно t IN R.

Например, выполним запрос к отношениям:

Performances(title, year, runningTime, type, theatreName, composer, producerC#),

Producers(name, address, cert#, networth)

и определим имя и адрес режиссеров, поставивших в 1998 году спектакли в Мариинском театре:

SELECT name,address

FROM Producers

WHERE cert# IN

(SELECT producer#

FROM Performances

WHERE year=1998 AND theatre=’Mariinsky’);

Подзапрос порождает список скалярных значений атрибутов. Рассмотрим случай, когда условие, указанное в пункте WHERE, содержит кортеж, который представляется списком скалярных значений атрибутов, например (name,address). Кортеж t можно сравнивать с отношением R, если и кортеж и отношение имеют одинаковый список атрибутов, расположенных в одинаковом порядке. При этом условие может содержать операторы > , < , = , >= , <= и ключевые слова IN,ANY,ALL:

Условие t IN R истинно тогда и только тогда, когда t совпадает с одним из кортежей R. Условие t NOT IN R истинно, когда t не совпадает ни с одним кортежем R.

Условие t <> ALL R истинно тогда и только тогда, когда кортеж t не совпадает ни с одним кортежем из R. Это условие эквивалентно t NOT IN R.

Условие t <> ANY R истинно тогда и только тогда, когда в R есть хотя бы один кортеж, отличающийся от t .

Например, требуется найти все данные о спектаклях, в которых участвует актер Farukh Ruzimatov. Воспользуемся двумя отношениями:

Performances(title,year,runningTime,type,theatreName, composer,producerC#),

ActsIn(perfTitle, perfYear, perfTheatre, actorName).

Запишем запрос в виде:

(SELECT title,year,runningTime,type,theatreName, composer

FROM Performances

WHERE (title,theatre,year) IN

(SELECT perfTitle,perfTheatre,perfYear

FROM ActsIn

WHERE actorName=’Farukh Ruzimatov’);

Основной запрос просматривает последовательно кортежи (title,theatre,year) из отношения Performances и проверяет условие, содержатся ли они в полученном в отношении. При совпадении кортежей формируется результат запроса.

В подзапросах можно использовать ключевое слово EXISTS. При этом условие EXISTS R истинно, если R не пусто, и соответственно условие NOT EXISTS R истинно если R пусто. Например, запрос о спектаклях, в которых участвует актер Farukh Ruzimatov может быть записан с ключевым словом EXISTS:

(SELECT title,year,runningTime,type,theatreName,composer

FROM Performances

WHERE EXISTS

( SELECT *

FROM ActsIn

WHERE actorName=’Farukh Ruzimatov’

AND perfTitle=title AND thetreName=tneatre

AND perfYear=year);

При выполнении этого запроса сначала на основе отношения ActsIn формируется множество кортежей, содержащих названия спектаклей, в которых участвует Farukh Ruzimatov, затем из отношения Performances извлекается информация об этих спектаклях.

Порядок выполнения работы

Выполните следующие подзапросы типа к базе данных кораблей на языке SQL. Используйте подзапросы и операторы EXIST, IN, ALL, ANY.

1. Найдите страны, корабли которых имеют наибольшее число орудий.

2. Найдите классы кораблей, в которых хотя бы один корабль был потоплен в сражении.

3. Найдите названия кораблей с орудиями калибра 16 дюймов.

4. Найдите сражения, в которых участвовали корабли класса Конго.

5. Найдите названия кораблей, имеющих наибольшее число орудий среди всех кораблей такого же водоизмещения.

Выполните следующие подзапросы типа к базе данных компьютеров на языке SQL. Используйте подзапросы и операторы EXIST, IN, ALL, ANY.

1. Найдите производителей ПК со скоростью не менее 1600 МГц.

2. Найдите принтеры, имеющие самую высокую скорость.

3. Найдите лаптопы, скорость которых меньше скорости любого ПК.

4. Найдите номер модели любого типа продукта (ПК, лаптопа, принтера), имеющего самую высокую скорость.

5. Найдите производителей самых дешевых цветных принтеров.

6. Найдите производителей ПК с самым быстрым процессором среди всех ПК с наименьшим объемом RAM.

Приложение 1

База данных спектаклей

Performances

title year runningTime type theatre composer producerC#
Aida perform Mariinsky Diuseppe Verdy
Don Carlos perform La Scala Diuseppe Verdy
Don Pascuale concert Mariinsky Gaetano Donizetti null
Macbeth perform Mariinsky Pyotr Tchaikovsky
Swan lake perform Mariinsky Pyotr Tchaikovsky
Giselle perform Mariinsky Adolphe Adam
Salome perform Mariinsky Richard Strauss
Carmen perform Sarah Bernhart George Bizet
Apollo perform Mariinsky Igor Stravinsky
Otello perform La Scala Diuseppe Verdy
Romeo and Juliet perform Covent Garden Sergei Prokofiev
Arabella perform Covent Garden Peter Mussbach

ActsIn

perfTitle theatreName perfYear actorName
Don Carlos La Scala Olga Borodina
Carmen La Canerenlola Olga Borodina
Aida Mariinsky Olga Borodina
Aida Mariinsky Irina Bogacheva
Rigoletto Bolshoy Theatre Irina Bogacheva
Samson and Dalila Mariinsky Irina Bogacheva
Carmen Mariinsky Yury Marusin
La Traviata Bolshoy Theatre Yury Marusin
Swan Lake Mariinsky Ulyana Lopatkina
Giselle Mariinsky Ulyana Lopatkina
Giselle Mariinsky Farukh Ruzimatov
Apollo Mariinsky Farukh Ruzimatov
Otello La Scala Plassito Domingo
Otello La Scala Frivotti Nuggi

Actors

name address ampoule gender bithdate
Olga Borodina Saint Petersburg Garden st.10/10 Singer F 1972-02-02
Irina Bogacheva Saint Petersburg Nevsky st.15/15 Singer F 1950-01-01
Yury Marusin Saint Petersburg Grate Sea st.15/15 Singer M 1945-05-05
Ulyana Lopatkina Saint Petersburg Small Sea st.25/25 Principal dancer F 1975-05-05
Farukh Ruzimatov Saint Petersburg Nevsky st.150/15 Principal dancer M 1973-03-03
Plassito Domingo Milan Singer M 1966-06-06

Producers

name address cert# networth
Alexei Stepaniuk Saint Petersburg Garden st.10/10
Yury Alexandrov Saint Petersburg Lime av.15/15
David McVicar London Old st. 12/2
Lev Ivanov Saint Petersburg Palace quay 21
Jules Perrot Paris Capuchin av.112
David Freeman New York Fifth av.133
Rollan Petit Paris Capuchin av.150
George Balanchine Paris
Valery Gergiev Saint Petersburg Theatre sq.1
Karlo Fontana Milan
Kennet Macmillan London Olg St 33
Peter Mussbach London Liverpool st 17

Theatre

teatreName artDirector city cert#
Mariinsky Valery Gergiev Saint Petersburg
La Scala Karlo Fontana Milan
Covent Garden Russel Roberts London
Bolshoy Theatre Valery Borisov Moscow
Grand Opera Rudolf Nuriev Paris

База данных кораблей второй мировой войны

Classes Battles

сlass type country num Guns bore displ­ace­ment   name date
Bismark Bs Germany   North Atlantic 24.2.41
Iowa Bs USA   Guadalcanal 15.11.42
Kondo Bc Japan   North Cope 26.12.43
North California Bs USA   Surigao Straiy 25.10.44
Renown Bc G Britain      
Revenge Bs G Britain      
Tennessee Bs USA      
Yamato Bs Japan      

Outcomes Ships

ship battle result   name class launched
Bismarck North Atlantic sunk   California Tennessee
California Surigao Strait ok   Haruna Kongo
Duke of York North Cape ok   Hiei Kongo
Fuso Surigao Strait sunk   Iowa Iowa
Hood North Atlantic sunk   Kirishima Kongo
King George North Atlantic ok   Kongo Kongo
Kirishima Guadalcanal sunk   Missouri Iowa
Prince of Wales North Atlantic damaged   Musachi Yamato
Rodney North Atlantic ok   New Jersey Iowa
Schamhost North Cape sunk   North Carolina North Carolina
South Dakota Guadalcanal damaged   Ramillies Ravenge
Tennessee Surigao Strait ok   Renown Renown
Washington Guadalcanal ok   Repulse Renown
West Virginia Surigao Strait ok   Resolution Revenge
Yamashiro Surigao Strait sunk   Revenge Revenge
        Royal Oak Revenge
        Royal Sovereign Revenge
        Tennessee Tennessee
        Washington North Carolina
        Wisconsin Iowa
        Yamato Yamato

База данных компьютеров

Product PC
Maker Model Type   Model Speed RAM HD CD Price
A PC   6x
A PC   6x
A PC   6x
B PC   8x
B PC   8x
B Printer   8x
B Printer   8x
C PC   8x
C PC   8x
D PC   8x
D PC              
D PC Laptop
D Laptop   Model Speed RAM HD Screen Price
D Laptop   9.5
D Laptop   11.3
D Printer   10.4
D Printer   11.2
E Laptop   11.2
E Laptop   12.1
F Laptop   12.1
G Laptop   12.1
G Laptop              
H Printer Printer  
I Printer   Model Color Type Price    
        True Ink-jet    
        True Ink-jet    
        False Laser    
        False Laser    
        False Ink-jet    
        true Laser    

Наши рекомендации