Классика баз данных - статьи

       

Если имя атрибута фигурирует только


Если имя атрибута фигурирует только в одном из участвующих отношений, его не нужно уточнять (например, в Q13 можно было бы указать просто SELECT NAME, LOC).

Q13. Выдать имена всех служащих и расположение их отделов. SELECT EMP.NAME,DEPT.LOC FROM EMP,DEPT WHERE EMP.DNO = DEPT.DNO

В некоторых типах запросов необходимо связывать отношение с самим собой в соответствии с некоторым критерием. Это можно сделать, указав имя отношения больше чем один раз в разделе FROM, как показано в запросе Q14. В таком запросе пользователь может связать с каждым из участвующих отношений некоторую произвольную метку (в этом примере в качестве меток выбраны X и Y). Эти метки могут затем использоваться вместо имени отношения для уточнения ссылок в разделах SELECT и FROM.

Q14. Для каждого служащего, зарплата которого выше зарплаты его руководителя, выдать имя этого служащего и имя его руководителя. SELECT X.NAME, Y.NAME FROM EMP X, EMP Y WHERE X.MGR = Y.EMPNO AND X.SAL > Y.SAL

Язык SEQUEL 2 также позволяет использовать метку для уточнения имен атрибутов вне блока отображения, в котором определена эта метка. Например, в запросе Q15 ищутся кортежи X отношения SUPLLY, такие что множество деталей, поставляемых компанией-поставщиком в кортеже X (вычисляемое в первом вложенном отображении), содержит множество деталей, используемых отделом 50 (вычисляемое во втором вложенном отображении).

Q15. Выдать названия компаний, которые поставляют все детали, используемые отделом 50. SELECT SUPPLIER FROM SUPPLY X WHERE (SELECT PART FROM SUPPLY WHERE SUPPLIER = X.SUPPLIER) CONTAINS (SELECT PART FROM USAGE WHERE DNO = 50)

Мы разрабатывали SEQUEL 2 таким образом, чтобы всякий раз, когда переменная появляется вне блока, в котором она определена, ее можно было внести в этот блок (и часто совсем исключить) с помощью GROUP BY и специальной функции SET. Например, запрос Q16 эквивалентен запросу Q15.

Q16. (Эквивалентно Q15.) SELECT SUPPLIER FROM SUPPLY GROUP BY SUPPLIER HAVING SET(PART) CONTAINS SELECT PART FROM USAGE WHERE DNO = 50


Содержание  Назад  Вперед