|
Программирование >> Руководство по sql
Ниже приведено несколько примеров операторов, использующих EXISTS, и эквивалентные им альтернативы. На рис. 8.5 показаны два запроса, которые находят названия книг, опубликованных любым издательством, расположенном в городе, название которого начинается с буквы В. Оба запроса выдают одинаковые результаты. Из этих результатов следует, что двенадцать книг в таблице titles опубликованы издательствами, расположенными либо в Бостоне (Boston), либо в Беркли (Berkeley). Результат: title Secrets of Silicon Valley The Busy Executives Database Guide Emotional Security: A New Algorithm Prolonged Data Deprivation: Four Case Studies Cooking with Computers: Surreptitious Balance Sheets Net Etiquette You Can Combat Computer Stress! But Is It User Friendly? Is Anger the Enemy? Life Without Fear Straight Talk About Computers Computer Phobic and Non-Phobic Individuals: Behavior Variations NOT EXISTS отыскивает пустой набор NOT EXISTS выполняет действие, обратное EXISTS. Успешный результат выполнения запросов с NOT EXISTS соответствует случаю, когда подзапрос вообще не возврашает строк. Чтобы найти, например, названия издательств, которые не публикуют книги по бизнесу, запрос должен иметь следующий вид: SQL: select pub name from publishers where not exists (select * from titles where pub id = publishers.pub id and type = business) Результат: pub name Binnet & Hardley Следующий запрос позволяет найти названия книг, ни одна из которых еще не была продана: SQL: select title from titles where not exists (select title id from salesdetails where title id = titles.title id) Результат: title The Psychology of Computer Cooking Net Etiquette Использование EXISTS для поиска пересечения и разности Подзапросы, начинающиеся с EXISTS и NOT EXISTS, можно использовать для выполнения двух операций из теории множеств: пересечения и разности. Пересечение двух множеств содержит все элементы, которые принадлежат обоим исходным множествам. Разность двух множеств содержит элементы, которые принадлежат только первому из двух множеств. Пересечением authors и publishers по столбцу city является множество городов, в которых проживает какой-то автор и расположено какое-то издательство: SQL: select distinct city from authors where exists (select * from publishers where authors.city = publishers.city) Результат: city Berkeley Разностью между authors и publishers no столбцу city является множество городов, в которых проживает какой-то автор, но нет никакого издательства (т.е. все города, за исключением Беркли): SQL: select distinct city from authors where not exists (select * from publishers where authors.city = publishers.city) Результат: city Ann Arbor Corvallis Covelo Gary Lawrence Menlo Park Nashville Oakland Palo Alto Rockville Salt Lake City San Francisco San Jose Vacaville Walnut Creek ПОДЗАПРОСЫ С РАЗНЫМИ УРОВНЯМИ ВЛОЖЕНИЯ Подзапрос сам может включать один или несколько других подзапросов. Вы можете организовать вложенную структуру, включающую любое число подзапросов. Примером задачи, которая может быть решена с помощью оператора с несколькими уровнями вложенных запросов, является следующая: Найти фамилии авторов, участвовавших в написании по крайней мере одной книги по компьютерам . SQL: select au lname, au fname from authors where au id in (select au id from titleauthors where title id in (select title id from titles where type = popular comp) ) Результат: au Iname au fname Carson Cheryl Dull Ann Hunter Sheryl Locksley Chastity Самый внутренний запрос возврашает идентификационные номера названий РС1035, РС8888 и РС9999. Запрос на следующем по старшинству уровне выполняется на основе этих идентификаторов названий и возвращает идентификационные номера авторов. Наконец, внешний запрос использует найденные идентификаторы авторов для поиска их фамилий. Этот запрос можно также представить в виде объединения: SQL: select au lname, au fname from authors, titles, titleauthors where authors.au id = titleauthors.au id and titles.title id = titleauthors.title id and type = popular comp ПОДЗАПРОСЫ В ОПЕРАТОРАХ UPDATE, DELETE И INSERT Подзапросы могут быть вложены в операторы UPDATE, DELETE и INSERT так же, как и в операторы SELECT. Приведенный ниже запрос увеличивает в два раза цену всех книг, опубликованных издательством New Age Books. Данный оператор обновляет таблицу titles; в его подзапросе есть обращение к таблице publishers.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |