Мартин грубер понимание sql перевод Лебедева В. Н. Под редакцией Булычева В. Н. Москва, 1993 martin gruber


Download 1.45 Mb.
bet68/172
Sana26.01.2023
Hajmi1.45 Mb.
#1128343
1   ...   64   65   66   67   68   69   70   71   ...   172
Bog'liq
Грубер. Понимание SQL

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.12: Использование EXISTS с соотнесенным подзапросом


Это может также быть выполнено как
SELECT *
FROM Customers outer
WHERE 1 > ( SELECT COUNT (*)
FROM Customers inner
WHERE outer.rating < = inner.rating
AND inner.city = 'Rome' );

Вывод к этому запросу показывается в Рисунке 13.13. Теперь Вы начинаете понимать, сколько способов имеется в SQL. Если это все кажется несколько путанным на этой стадии, нет причины волноваться. Вы обучаетесь, чтобы использовать ту технику, которая лучше всего отвечает вашим требованиям и наиболее понятна для вас. Начиная с этого места, мы хотим показать Вам большое количество возможностей, что бы вы могли найти ваш собственный стиль.
=============== SQL Execution Log ============
| SELECT * |
| FROM Customers outer |
| WHERE 1 > |
| (SELECT COUNT (*) |
| 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.13: Использование COUNT вместо EXISTS


РЕЗЮМЕ
Итак, вы прошли много чего в этой главе. Подзапросы не простая тема, и мы потратили много время чтобы показать их разновидности и неоднозначности. То чему Вы теперь научились, вещи достаточно глубокие. Вы знаете несколько технических решений одной проблемы, и поэтому вы можете выбрать то которое более подходит вашим целям. Кроме того, вы поняли, как различные формулировки будут обрабатывать пустые значения (NULL) и ошибки.
Теперь, когда вы полностью изучили запросы, наиболее важный, и вероятно наиболее сложный, аспект SQL, объем другого материала будет относительно прост для понимания.
Мы имеем еще одну главу о запросах, которая покажет вам как объединить выводы любого числа запросов в единое тело, с помощью формирования объединения многочисленых запросов используя оператор UNION.
РАБОТА С SQL

  1. Напишите запрос, который бы выбирал всех заказчиков чьи оценки равны или больше чем любая (ANY) оценка заказчика Serres.

  2. Что будет выведено вышеупомянутой командой?

  3. Напишите запрос, использующий ANY или ALL, который бы находил всех продавцов, которые не имеют никаких заказчиков, размещенных в их городе.

  4. Напишите запрос, который бы выбирал все порядки с суммой больше чем любая (в обычном смысле) для заказчиков в Лондоне.

  5. Напишите предыдущий запрос с использованием MAX.

(См. Приложение A для ответов.)



Download 1.45 Mb.

Do'stlaringiz bilan baham:
1   ...   64   65   66   67   68   69   70   71   ...   172




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling