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

1 ... 54 55 56 [ 57 ] 58 59 60 ... 105


where city = any

(select city from publishers) order by city

Результат: au Iname

Carson Bennet

au fname

Cheryl

Abraham

city

Berkeley Berkeley

Однако оператор О ANY (или оператор != ANY - это зависит от синтаксиса, принятого в конкретной системе) отличается от оператора NOT IN. <> ANY означает не = а или не = Ь или не = с . NOT IN означает не = амне = Ь не = с . Допустим, вы хотите найти авторов, которые проживают в городе, в котором нет ни одного издательства. Для этого можно было бы воспользоваться следующим запросом:

SQL:

select au lname, au fname from authors where city <> any

(select city from publishers)

Результат:

au lname

au fname

Bennet

Abraham

Green

Marjorie

Carson

Cheryl

Ringer

Albert

Ringer

Anne

DeFrance

Michel

Panteley

Sylvia

McBadden

Heather

Stringer

Dirk

Straight

Dick

Karsen

Livia

MacFeather

Stearns

Dull

Yokomoto

Akiko

OLeary

Michael

Gringlesby

Burt

Greene

Morningstar

White

Johnson

del Castillo

Innes

Hunter

Sheryl

Locksley

Chastity

Blotchet-Halls

Reginald

Smith

Meander

Полученные результаты включают всех 23 авторов. Это произошло потому, что каждый автор проживает в каком-то городе, где нет какого-нибудь издательства



(поскольку каждый автор живет в одном и только одном городе). Внутренний запрос находит все города, в которых расположены издательства, а затем внешний запрос - для каждого города - находит авторов, которые там не живут. Вот что произойдет, если в этот запрос подставить оператор NOT IN;

SQL:

select au lname, au fname, city from authors where city not in

(select city from publishers)

order by city

Результат:

au lname

au fname

city

del Castillo

Innes

Ann Arbor

Blotchet-Halls

Reginald

Corvallis

Gringlesby

Burt

Covelo

DeFrance

Michel

Gary

Smith

Meander

Lawrence

White

Johnson

Menlo Park

Greene

Morningstar

Nashville

MacFeather

Stearns

Oakland

Stringer

Dirk

Oakland

Straight

Dick

Oakland

Karsen

Livia

Oakland

Green

Marjorie

Oakland

Dull

Palo Alto

Hunter

Sheryl

Palo Alto

Panteley

Sylvia

Rockville

Ringer

Anne

Salt Lake City

Ringer

Albert

Salt Lake City

Locksley

Chastity

San Francisco

OLeary

Michael

San Jose

McBadden

Heather

Vacaville

Yokomoto

Akiko

Walnut Creek

Именно эти результаты вам и требовалось получить. Они включают всех авторов, за исключением Cheryl Carson и Abraham Bennet, которые проживают в Беркли, где расположено издательство Algodata Infosystems.

ПОДЗАПРОСЫ, ВОЗВРАЩАЮЩИЕ ЕДИНСТВЕННОЕ

ЗНАЧЕНИЕ

Подзапрос, начинающийся с немодифищ1рованного оператора сравнения (оператор сравнения, не сопровождаемый ключевыми словами ANY или ALL), должен возвращать единственное значение. (В противном случае вы получите сообщение об ошибке, и запрос не будет обработан.) Такие подзапросы имеют общую форму следующего вида:

Начало операторов SELECT, INSERT, UPDATE, DELETE или подзапроса

WHERE выражение оператор сраБнения (подзапрос)

[Конец операторов SELECT, INSERT, UPDATE, DELETE или подзапроса]



в идеале, чтобы воспользоваться этим видом подзапроса, вы должны достаточно хорошо знать свои данные и суть решаемой вами задачи, чтобы быть уверенным в том, что подзапрос возвратит именно одно и только одно значение. Если же вы рассчитываете получить несколько значений, воспользуйтесь ключевым словом IN или модифицированным оператором сравнения.

Если, например, вы предполагаете, что каждое издательство размешается только в одном городе, и хотите найти фамилии авторов, проживаюших в городе, где размешается издательство Algodata Infosystems, то можете написать оператор SQL с подзапросом, начинающимся с простого оператора сравнения = :

SQL:

select au lname, au fname from authors where city =

(select city from publishers where pub name = Algodata Infosystems)

Результат:

au lname au fname

Bennet Abraham

Carson Cheryl

Агрегирующие функции гарантируют единственное значение

Подзапросы с оператором сравнения часто включают афегируюшие функции, поскольку эти функции гарантированно возвращают единственное значение. Например, если требуется найти названия всех книг с ценами выше текущей минимальной цены, надо выполнить следующий запрос:

SQL:

select title from titles where price >

(select min{price) from titles)

Результат: 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 Silicon Valley Gastronomic Treats Sushi, Anyone?

Fifty Years in Buckingham Palace Kitchens But Is It User Friendly? Is Anger the Enemy? Life Without Fear

Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean Straight Talk About Computers



1 ... 54 55 56 [ 57 ] 58 59 60 ... 105

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