|
Программирование >> Руководство по sql
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)
Полученные результаты включают всех 23 авторов. Это произошло потому, что каждый автор проживает в каком-то городе, где нет какого-нибудь издательства (поскольку каждый автор живет в одном и только одном городе). Внутренний запрос находит все города, в которых расположены издательства, а затем внешний запрос - для каждого города - находит авторов, которые там не живут. Вот что произойдет, если в этот запрос подставить оператор NOT IN; SQL: select au lname, au fname, city from authors where city not in (select city from publishers)
Именно эти результаты вам и требовалось получить. Они включают всех авторов, за исключением 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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |