Студопедия

КАТЕГОРИИ:


Архитектура-(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.

Вложение подзапросов

Использование функции CAST

Для того, чтобы трактовать значение одного типа как значение другого типа применяется функция CAST:

CAST (<значение> AS <тип_данных>)

Множество типов данных, в которые может быть преобразовано значение:

Пример:

SELECT *

FROM RASHOD

WHERE CAST(KOLVO AS CHAR(4)) LIKE “%09”

Часто невозможно решить поставленную задачу путем использования единственного запроса. Например, в тех случаях, когда при использовании условия поиска в предложении WHERE параметр <значение, с которым сравнивать> заранее не определен и должен вычисляться в момент выполнения оператора SELECT.

В этом случае оператор SELECT с подзапросом имеет следующий вид:

SELECT …

FROM …

WHERE <сравниваемое_значение> <оператор> (SELECT …)

Пример:

SELECT KOLVO, DAT_RASH

FROM RASHOD

WHERE KOLVO = (SELECT MAX(KOLVO) FROM RASHOD)

Замечание.

Ошибкой для данного вида запроса является использование вложенного оператора SELECT, возвращающего вместо единичного список значений.

Пример1 (ошибочный):

SELECT R.DAT_RASH, R.TOVAR, R.KOLVO, R.POKUP

FROM RASHOD R

WHERE R.POKUP = (SELECT POK.POKUP

FROM POKUPATELI POK

WHERE UPPER(POK.GOROD) = ‘МОСКВА’)

Пример 2 (исправленный):

SELECT R.DAT_RASH, R.TOVAR, R.KOLVO, R.POKUP

FROM RASHOD R

WHERE R.POKUP IN (SELECT POK.POKUP

FROM POKUPATELI POK

WHERE UPPER(POK.GOROD) = ‘МОСКВА’)

Пример 3

SELECT RRR.*

FROM RASHOD RRR

WHERE R.POKUP IN

(SELECT R.POKUP

FROM RASHOD R

WHERE KOLVO =

(SELECT MAX(RSH.KOLVO)

FROM RASHOD RSH))

 

Логический порядок выполнения запроса:

· Определяется самая крупная покупка – отыскивается максимальное значение в столбце KOLVO («самый вложенный» запрос).

· Определяется покупатель, осуществивший эту покупку (средний запрос)

· Основной запрос выбирает записи с заданным покупателем.

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

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

Пример.

Составить список покупателей, которые хотя бы один раз получали товар со склада:

SELECT P.POKUP

FROM POKUPATELI P

WHERE EXISTS (SELECT R.POKUP

FROM RASHOD R

WHERE R.POKUP = P.POKUP)

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

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

Пример.

Составить список покупателей, купивших только один товар:

SELECT P.*

FROM POKUPATELI P

WHERE SINGULAR (SELECT *

FROM RASHOD R

WHERE R.POKUP = P.POKUP)

 

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

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

ALL указывает, что условие поиска будет истинно только тогда, когда сравниваемое значение находится в нужном отношении со ВСЕМИ значениями, возвращаемыми подзапросом.

WHERE STOLBEZ > ALL (SELECT POLE FROM TABLIZA)

SOME (или ANY) условие истинно, когда сравниваемое значение находится в нужном отношении ХОТЯ БЫ С ОДНИМ значением, возвращаемым подхвпросом.

WHERE STOLBEZ > SOME (SELECT POLE FROM TABLIZA)

Пример.

Определим все факты отгрузки товара со склада, в которых количество единиц отгружаемого товара превышает среднее значение.

SELECT * FROM RASHOD R1

WHERE R1.KOLVO > ALL

(SELECT AVG(R2.KOLVO) FROM RASHOD R2

GROUP BY POKUP)

Определим все факты отгрузки товара со склада, в которых количество единиц отгружаемого товара превышает среднее значение отгрузки хотя бы одного товара.

SELECT * FROM RASHOD R1

WHERE R1.KOLVO > SOME

(SELECT AVG(R2.KOLVO) FROM RASHOD R2

GROUP BY POKUP)

 




Поделиться с друзьями:


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


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



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




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