Программирование >>  Руководство по sql 

1 ... 56 57 58 [ 59 ] 60 61 62 ... 105


Ниже приведено несколько примеров операторов, использующих 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.



1 ... 56 57 58 [ 59 ] 60 61 62 ... 105

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика