Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных / БД2012 / Understanding.SQL.doc
Скачиваний:
281
Добавлен:
28.03.2015
Размер:
1.75 Mб
Скачать

Специальный оператор 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

Соседние файлы в папке БД2012