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

1 ... 27 28 29 [ 30 ] 31 32 33 ... 105


Результат:

title id

ytd sales

ls7777

зГзб

PS3333

4072

BUllll

3876

MC2222

2032

TC4203

15096

BU2075

18722

PS2091

2045

PS2106

MC3021

22246

TC3218

PS1372

Это еще один пример, когда могут возникнуть определенные затруднения. На обычном языке суть запроса формулируется следующим образом: нужно найти все книги с количеством проданных экземпляров до 4095 и все книги с количеством проданных экземпляров больше 12000. Хотя мы говорим и , в запросе нужно использовать оператор OR (или). Если вместо него применить оператор AND, то в результате не будет найдена ни одна книга, так как не может быть продано экземпляров одной книги меньше 4095 и одновременно больше 12000.

Списки (IN и NOT IN)

Ключевое слово IN позволяет выбрать значения, совпадающие со значениями из заданного списка. Например, без использования IN для получения списка авторов, проживающих в Калифорнии, Индиане и Мериленде, нужно было бы выполнить следующий запрос:

SQL:

select au lname, state from authors

where state = CA or state = IN or state = MD

Этот же результат можно получить с использованием ключевого слова IN. Значения, идущие после IN, должны браться в кавычки, разделяться запятыми и заключаться в скобки.

SQL:

select au lname, state from authors

where state in (CA, IN, MD)

Оба предыдущих запроса дают одинаковый результат:

Результат:

аи Iname

state

Bennet

Green

Carson

DeFrance

Panteley

McBadden

Stringer



straight

Karsen

MacFeather

Dull

Yokomoto

OLeary

Gringlesby

White

Hunter

Locksley

Чем больше элементов в списке, тем значительнее становится экономия времени при использовании ключевого слова IN, так как отпадает необходимость во вводе многочисленных операторов сравнения.

Возможно, наиболее полно преимущества ключевого слова IN проявляются во вложенных запросах, также называемых подзапросами. Подзапросы подробно обсуждаются в главе 8. Тем не менее, рассмотрев следующий пример, вы поймете, как в подзапросах можно использовать ключевое слово IN.

Предположим, нужно найти имена авторов, которые получают меньше 50 процентов от суммарного гонорара за книги, написанные ими в соавторстве. Имена авторов содержатся в таблице authors, информация о распределении гонораров хранится в таблице titleauthors. Ключевое слово IN позволяет как бы объединить обе таблицы (без получения общей таблицы) и извлечь при этом нужную информацию.

SQL:

select au lname, au fname from authors where au id in (select au id from titleauthors where royaltyshare < .50)

Результат:

au Iname

au fname

Green

Marjorie

Ringer

Anne

MacFeather

Stearns

Yokomoto

Akiko

OLeary

Michael

Gringlesby

Burt

Таким образом, шесть авторов хотя бы за одну книгу получали меньше 50 процентов от общего гонорара.

Конструкция NOT IN позволяет найти авторов, не удовлетворяющих условиям, перечисленным в списке. С помощью следующего запроса можно найти всех авторов, которые хотя бы за одну книгу получили больше половины от общего гонорара.

SQL:

select au lname, au fname from authors where au id not in (select au id from titleauthors where royaltyshare < .50)



Результат:

au Iname

au fname

Bennet

Abraham

Carson

Cheryl

Ringer

Albert

DeFrance

Michel

Panteley

Sylvia

McBadden

Heather

Stringer

Dirk

Straight

Dick

Karsen

Livia

Dull

Greene

Morningstar

White

Johnson

del Castillo

Innes

Hunter

Sheryl

Locksley

Chastity

Blotchet-Halls

Reginald

Smith

Meander

Выборка нулевых значений

Как вы помните из предыдущих глав, значение NULL используется для представления неизвестной информации. И это не то же самое, что обычный нуль или пустая позиция.

Чтобы прояснить эти различия, рассмотрим следующий листинг, в котором представлены названия и расходы по книгам, принадежащим одному издателю.

SQL:

select title, advance

from titles

where pub id = 0877

Результат:

title advance

Silicon Valley Gastronomic Treats 0

Sushi, Anyone? 8000

Fifty Years in Buckingham Palace Kitchens 4000

The Psychology of Computer Cooking NULL

The Gourmet Microwave 15000 Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean 7000

Бросив взгляд на результаты запроса, можно отметить, что расходы (авансовые выплаты) на книгу Silicon Valley Gastronomic Treats составили ровно $0.00, что, вероятно, связано с малоизвестностью автора. Свой гонорар он будет получать по мере продажи экземпляров этой книги. Расходы на другую книгу The Psychology of Computer Cooking выражаются нулевым значением (NULL), возможно, автор и издатель еще не полностью договорились о характере своих отношений либо эти данные просто забыли ввести в базу данных. Со временем это значение будет уточнено и помещено в таблицу. Возможно, оно будет нулем (как в случае с пер-



1 ... 27 28 29 [ 30 ] 31 32 33 ... 105

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