
- •Операции над данными, определенные в иерархической модели:
- •Операции над данными.
- •Объединение
- •Пересечение
- •Разность
- •Произведение
- •Выборка
- •Проекция
- •Деление
- •Соединение
- •Операторы базы данных
- •Создание и удаление таблиц
- •Добавить новую запись в таблицу:
- •Примеры использования
- •Модификация записей:
- •Удаление записей
- •Выборка данных.
- •Специальные операторы any или some
- •Специальный оператор all
- •Any и all вместо exists с пустым указателем( null )
- •Удаление индексов
- •Введение: представления
- •Что такое представление ?
- •Команда create view
- •Модифицирование представлений
- •Что не могут делать представления
- •Удаление представлений
- •Основные понятия метода
- •Формирование отношений для связи 1:1
- •Формирование отношений для связи м:м
- •Архитектура базы данных. Физическая и логическая независимость
- •Проблемы параллельного доступа с использованием транзакций
- •[Править]По области действия
- •[Править]По строгости
- •Восстановление базы данных
- •Характеристики хранилищ данных
- •Тип данных hierarchyid
- •Пространственные типы данных
- •Встроенные (системные) функции
- •1) Список стандартных функций
- •Объявление хранимой функции
- •Основные методы восстановления данных
Специальные операторы any или some
Операторы SOME и ANY - взаимозаменяемы везде и там где мы используем ANY, SOME будет работать точно так же. Различие в терминологии состоит в том чтобы позволить людям использовать тот термин который наиболее однозначен. Это может создать проблему; потому что, как мы это увидим, наша интуиция может иногда вводить в заблуждение. Имеется новый способ нахождения продавца с заказчиками размещенными в их городах ( вывод для этого запроса показывается в Рисунке 13.1 ):
SELECT *
FROM Salespeople
WHERE city = ANY
(SELECT city
FROM Customers );
Оператор ANY берет все значения выведенные подзапросом, ( для этого случая - это все значения city в таблице Заказчиков ), и оценивает их как верные если любой(ANY) из их равняется значению города текущей строки внешнего запроса.
=============== SQL Execution Log ============
| SELECT * |
| FROM Salespeople |
| WHERE city = ANY |
| (SELECT city |
| FROM Customers); |
| ============================================= |
| cnum cname city comm |
| ----- -------- ---- -------- |
| 1001 Peel London 0.12 |
| 1002 Serres San Jose 0.13 |
| 1004 Motika London 0.11 |
=============================================
Рисунок 13. 1: Использование оператора ANY Это означает, что подзапрос должен выбирать значения такого же типа как и те, которые сравниваются в основном предикате. В этом его отличие от EXISTS, который просто определяет, производит ли под- запрос результаты или нет, и фактически не использует эти результаты.
Специальный оператор all
С помощью ALL, предикат является верным, если каждое значение выбранное подзапросом удовлетворяет условию в предикате внешнего запроса. Если мы хотим пересмотреть наш предыдущий пример чтобы вывести толь- ко тех заказчиков чьи оценки, фактически, выше чем у каждого заказчика в Париже, мы можем ввести следующее чтобы произвести вывод показанный в Рисунке 13.9:
SELECT *
FROM Customers
WHERE rating > ALL
(SELECT rating
FROM Customers
WHERE city = Rome ):
=============== SQL Execution Log ============
| |
| SELECT * |
| FROM Customers |
| WHERE rating > ALL |
| (SELECT rating |
| FROM Customers |
| WHERE city = 'Rome'); |
| ============================================= |
| cnum cname city rating snum |
| ----- -------- ---- ------ ------ |
| 2004 Grass Berlin 300 1002 |
| 2008 Cisneros San Jose 300 1007 |
=============================================
Рисунок 13.9: Использование оператора ALL Этот оператор проверяет значения оценки всех заказчиков в Риме. Затем он находит заказчиков с оценкой большей чем у любого из заказчиков в Риме. Сама высока оценка в Риме - у Giovanni( 200 ). Следовательно, выбираются только значения выше этих 200. Как и в случае с ANY, мы можем использовать EXISTS для производства альтернативной формулировки такого же запроса - ( вывод показан на Рисунке 13.10 ):
SELECT *
FROM Customers outer
WHERE NOT EXISTS
( SELECT *
FROM Customers inner
WHERE outer.rating < = inner.rating
AND inner.city = 'Rome' );
=============== SQL Execution Log ============
| |
| SELECT * |
| FROM Customers outer |
| WHERE NOT EXISTS |
| (SELECT * |
| FROM Customers inner |
| WHERE outer rating = inner.rating |
| AND inner.city = 'Rome'); |
| ============================================= |
| cnum cname city rating snum |
| ----- -------- ---- ------ ------ |
| 2004 Grass Berlin 300 1002 |
| 2008 Cisneros San Jose 300 1007 |
=============================================
Рисунок 13.10: Использование EXISTS в качестве альтернативы к ALL