Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Использование предложений ALL, SOME, ANY

Использование подзапросов, возвращающих множество значений.

Использование предложения SINGULAR.

Использование предложения EXISTS.

Дополнительные возможности использования подзапросов, возвращающих единичное значение.

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

 

EXISTS (<подзапрос>)

 

Ключевые слова EXISTS и NOT EXISTS предназначены для использования только совместно с подзапросами. Результат их обработки равен TRUE или FALSE. Для ключевого слова EXISTS результат равен TRUE только тогда, когда в возвращаемой подзапросом результирующей таблице присутствует хотя бы одна строка. Если результирующая таблица подзапроса пуста, результатом обработки будет FALSE. Для NOT EXISTS правила обратные.

 

ПРИМЕР

 

Выбрать коды и названия книги студенческого фонда библиотеки, которые когда-либо выдавались на руки читателям.

 

SELECT Code, Name

FROM Books

WHERE Code IN (SELECT BookCode

FROM BookInventaryNumbers

WHERE FundCode = 2 AND

EXISTS (SELECT Code

FROM BookGiveOutRecord)

WHERE InventaryCode =

BookInventaryNumbers.Code))

 

Результат выполнения запроса приведен в таблице 12.3.

Таблица 12.3.

Code Name
  Автоматизированные системы управления технологическим процессом обогащения руды

Если в условии поиска нужно указать, что из таблицы требуется выбрать лишь те записи, для которых подзапрос возвращает только одно значение, указывается предложение

 

SINGULAR (<onepaтop_seIect >)

 

ПРИМЕР

 

Выбрать коды и названия книги студенческого фонда библиотеки, которые выдавались на руки читателям только один раз.

 

SELECT Code, Name

FROM Books

WHERE Code IN (SELECT BookCode

FROM BookInventaryNumbers

WHERE FundCode = 2 AND

SINGULAR (SELECT Code

FROM BookGiveOutRecord

WHERE InventaryCode =

BookInventaryNumbers.Code))

 

Результат выполнения запроса приведен в таблице 12.4.

Таблица 12.4.

Code Name
  Автоматизированные системы управления технологическим процессом обогащения руды

 

Результаты совпадают с примером для слова EXISTS только потому, что заданному условию в таблице BookGiveOutRecord Соответствует только одна запись.

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

 

<сравниваемое значение> [NOT] <оператор> {ALL | SOME | ANY} (<подзапрос>)

 

где подзапрос может возвращать более одного значения. Оператор определяет операцию сравнения (>, >=, < и т.д.). Отношение сравниваемого значения и значений, возвращаемых подзапросом, устанавливается словами ALL и SOME (ANY).

ALL определяет, что условие поиска истинно, когда сравниваемое значение находится в отношении, определяемом оператором, со всеми значениями, возвращаемыми подзапросом. Например:

 

WHERE STOLBEZ > ALL (SELECT POLE FROM TABLIZA)

 

определяет, что текущее значение столбца STOLBEZ должно быть больше всех значений в столбце с именем POLE из таблицы с именем TABLIZA.

SOME (вместо него можно указать ANY) говорит, что условие поиска истинно, когда сравниваемое значение находится в отношении, определяемом оператором, хотя бы с одним значением, возвращаемым подзапросом. Например:

 

WHERE STOLBEZ > SOME (SELECT POLE FROM TABLIZA)

 

определяет, что текущее значение столбца STOLBEZ должно быть больше хотя бы одного значения в столбце POLE из таблицы TABLIZA.

 

ПРИМЕР

 

Найдите инвентарные номера всех книг, чья стоимость превышает стоимость хотя бы одной книги книжного фонда под номером «1».

 

SELECT BookCode, InventaryNumber, Cost

FROM BookInventaryNumbers

WHERE Cost > SOME (SELECT Cost

FROM BookInventaryNumbers

WHERE FundCode = ‘1’)

 

Хотя этот запрос может быть записан с использованием подзапроса, определяющего минимальную стоимость книг книжного фонда под номером «1», после чего внешний подзапрос сможет выбрать сведения о всех книгах, чья стоимость превосходит это значение, возможен и другой подход, заключающийся в использовании ключевых слов SOME / ANY.

В этом случае внутренний подзапрос создает набор числовых значений {15.56, 22.33, 34.01, 12.99}, а внешний запрос выбирает сведения о тех книгах, цена которых больше любого из значений в этом наборе (фактически, больше минимального значения – 12.99). Подобный альтернативный метод можно считать более естественным, чем определение в подзапросе минимальной цены.

Результаты выполнения запроса представлены в таблице 12.5

Таблица 12.5.

BookCode InventaryNumber Cost
    15.56
    22.33
    34.01
    56.78

 

ПРИМЕР

 

Найдите инвентарные номера всех книг, чья стоимость превышает стоимость любой книги книжного фонда под номером «1».

 

SELECT BookCode, InventaryNumber, Cost

FROM BookInventaryNumbers

WHERE Cost > ALL (SELECT Cost

FROM BookInventaryNumbers

WHERE FundCode = «1»)

 

В целом этот запрос подобен предыдущему. И в данном случае можно было бы использовать подзапрос, определяющий максимальное значение стоимости книг из фонда под номером ‘1’, после чего с помощью внешнего запроса выбрать сведения обо всех книгах, стоимость которых превышает это значение. Однако в данном примере выбран подход с использованием ключевого слова ALL.

Результаты выполнения запроса представлены в таблице 12.6.

Таблица 12.6.

BookCode InventaryNumber Cost
    56.78
<== предыдущая лекция | следующая лекция ==>
Использование подзапросов | Внешние соединения
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 804; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.