КАТЕГОРИИ: Архитектура-(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; Просмотров: 458; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |