Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Базы данных

б. Ключевое слово ALL

Для ключевых слов ANY и SOME выполнялась логическая операция «ИЛИ», т. е. каждой отобранной записи главным запросом соответствовало хотя бы одно значение, возвращаемое младшим запросом.

Для ключевого слова выполняется логическая операция «И», т. е. в выборке, возвращенной старшим запросом, обязательно должны присутствовать все значения, возвращаемые младшим запросом.

Ключевое слово ALL возвращает «истину», если для каждого (every) значения, возвращенного вложенным (младшим) запросом, имеется одна или несколько записей, удовлетворяющих условию отбора в главном (старшем) запросе.

Предположим, что на экран надо вывести информацию о книгах всех издательств, кроме ИД «Форум» (порядковый номер 2), выпустивших свои книги по цене выше, чем цена любой книги издательства ИД «Форум».

Пример 9.35. Использование ключевого слова ALL.

SELECT Fam, Name book, Town, Izd, Price

FROM Book В, Fam F, Izd I, Town T, Per P, Author A WHERE A.Key fam = F.KeyFam AND B.Key Town = T.Key Town AND B Key lzd = I.KeyJzd AND B.Key Book = P.Key Book AND P.Key_Author = A.Key_Author AND Price > ALL (SELECT Price FROM Book B2 WHERE B2.Key_izd = 2)

Результат работы запроса представлен на рис. 9.4. Внутренний (младший) запрос просматривает все записи, принадлежащие издательству ИД «Форум» (порядковый номер 2), и возвращает стоимость каждой книги. Главный (старший) запрос просматривает за-

Fam

Name_book

|Town

| Izd

Price

?

Агальцов

Базы даг*ых

Москва

Мир

240

Фаронов

Программирование баз данных в Delphi 7

Санкт-Петербург

Питер

280

писи всех издательств, включая и ИД «Форум», и формирует выборку, исходя из условия, что цена каждой книги должна быть строго больше, чем цена любой книги (логическая операция «И»), изданной в ИД «Форум». Так как условие отбора «строго больше», то собственные книги ИД «Форум» в выборку не попадают.

Тот же самый результат можно получить, используя ключевое слово EXISTS вместо ключевого слова ALL.

Пример 9.36. Использование ключевого слова EXISTS вместо ALL.

SELECT Fam, Name book, Town, Izd, Price

FROM Book B, Fam F, Izd I, Town T, Per P, Author A

WHERE A.Key fam = F.KeyFam AND B.KeyTown = T.KeyTown

AND B.Keylzd = I.Keylzd AND B.KeyBook = P.KeyBook AND P.Key_Author = A.Key_Author

AND NOT EXISTS (SELECT Price FROM Book B2

WHERE B.Price <= B2.Price AND B2.Key_izd = 2)

Результат работы запроса будет аналогичный (рис. 9.4).

Наиболее часто ключевое слово ALL используется вместе с логической операцией о («не равно»).

Пример 9.37. Получить сведения о ценах (Price) книг издательства ИД «Форум».

SELECT Fam, Name book, Town, Izd, Price

FROM Book B, Fam F, Izd I, Town T, Per P, Author A WHERE A.Key fam = F.Key Fam AND B.Key Town = T.Key Town AND B.Key lzd = I.Key lzd AND B.KeyBook = P.Key Book AND P.KeyAuthor = A.KeyAuthor AN D Price <> ALL

(SELECT B2.Price FROM Book B2 WHERE B2.Key_izd <> 2)

Fam

Мате_Ьоок

Town

Izd

Price

?

Агальцов

Математические методы в программировании

Москва

ИД "Форум"

95

Агальцов

Информатика для экономистов

Москва

ИД'Форум"

120

Титов

Информатика д ля экономистов

Москва

ИД'Форум"

120

Волдайская

Математические методы в программировании

Москва

ИД'Форум"

95

Г воздееа

Введение в специальность программиста

Москва

ИД ’Форум"

65

Попов

Компьютерные сети

Москва

ИД ’Форум"

75

На рис. 9.5 представлен результат работы запроса.

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

Пример 9.38. Получить сведения о ценах (Price) книг издательства ИД «Форум», используя ключевое слово IN.

SELECT Fam, Name_book, Town, Izd, Price

FROM Book B, Fam F, Izd I, Town T, Per P, Author A WHERE A.Keyfam = F.KeyFam AND B.KeyTown = T.Key Town AND B.Keylzd = I.Keylzd AND B.KeyBook = P.KeyBook AND P.Key_Author = A.Key_Author AND Price NOT IN

(SELECT B2.Price FROM Book B2 WHERE B2.KeyJzd <> 2)

Эту же задачу можно решить, используя ключевое слово ANY.

Пример 9.39. Получить сведения о ценах (Price) книг издательства ИД «Форум», используя ключевое слово ANY.

SELECT Fam, Name book, Town, Izd, Price

FROM Book B, Fam F, Izd I, Town T, Per P, Author A WHERE A.Key fam = F.Key Fam AND B.Key Town = T.Key Town AND B Key lzd = I.Key lzd AND B.Key Book = P.Key Book AND P.Key_Author = A.Key_Author AND NOT Price = ANY

(SELECT B2.Price FROM Book B2 WHERE B2.Key_izd <> 2)

Главное различие между ключевыми словами ANY и ALL состоит в том, что если запрос формирует пустую выборку, то ключевое слово ANY возвращает «ложь», ключевое слово ALL — «истина».

При составлении логических условий с ключевыми словами ANY, ALL и EXISTS при обработке полей, содержащих пустые {NULL) значения, также могут быть получены пустые выборки. Поэтому при включении значений таких полей в логические условия следует очень тщательно формировать текст запроса.

Не рекомендуется использование ключевых слов ANY и ALL совместно с функциями агрегирования.

в. Ключевое слово HAVING

Если ключевые слова ANY и ALL участвовали в отборе каждой записи, то ключевое слово HAVING используется один раз для группы записей. Ключевое слово HAVING предназначено для совместного использования с функциями агрегирования и может размещаться только после имени запроса SELECT или внутри опции GROUP BY.

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

SELECT Izd, COUNTS)

FROM Book В, Izd I WHERE B.Key izd = I.KeyJzd GROUP BY Izd HAVING COUNTS) > 1

Результат работы запроса показан на рис. 9.6.

Izd

COUNT'D |

[?

ИД "Форум"

4

Рис. 9.6. Результат работы запроса примера 9.40

 
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Пред   СОДЕРЖАНИЕ   След >
 

Популярные страницы