Порядок выполнения работы. Теоретические сведения
Теоретические сведения Подзапрос – это выражение, приписывающее значение отношению. Подзапрос порождает скалярное значение. Рассмотрим случай, когда подзапрос порождает скалярное значение –единственное значение атрибута. В этом случае в пункте 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
ActsIn
Actors
Producers
Theatre
База данных кораблей второй мировой войны Classes Battles
Outcomes Ships
База данных компьютеров
Популярное: Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (620)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |