Читайте также: |
|
WHERE А.НомерСтудента = В.НомерСтудента
AND А.НазваниеПредмета NOT = В.НазваниеПредмета)
В этом примере как основной, так и вложенный запросы относятся к таблице ЗАПИСЬ. Во избежание неоднозначности этим двум вариантам использования таблицы ЗАПИСЬ присвоены различные имена. В первом операторе FROM таблице ЗАПИСЬ присвоено временное произвольное имя А, а во втором операторе FROM — другое временное произвольное имя В.
Выражение во вложенном запросе означает следующее: следует найти две строки в таблице ЗАПИСЬ, имеющие один и тот же номер студента, но различные названия предметов. (Это означает, что студент записан более чем на один предмет.) Если такие две строки существуют, то оператор EXISTS будет иметь логическое значение «истина»; в этом случае номер данного студента будет присутствовать в ответе. В противном случае оператор EXISTS будет иметь логическое значение «ложь», и номер данного студента в результате фигурировать не будет.
Можно рассматривать этот запрос и по-другому: представим себе две отдельные и идентичные копии таблицы ЗАПИСЬ. Назовем одну из копий А, а другую В. Будем сравнивать каждую строку А с каждой строкой В. Сначала рассмотрим первую строку А и первую строку В. Поскольку эти две строки идентичны, то и номер студента, и название предмета в них совпадают, поэтому атрибут Номер-Студента из данной строки не попадет в ответ.
Теперь рассмотрим первую строку А и вторую строку В. Если номер студента один и тот же, а названия предметов различаются, данный номер студента будет отображен в результатах. В сущности, мы сравниваем первую строку таблицы ЗАПИСЬ со второй строкой этой же таблицы. В данных, представленных на рис. 9.2, ни номер студента, ни название предмета не совпадают.
Далее мы продолжаем сравнивать первую строку А с каждой строкой В, Если выполняются заданные нами условия, мы выводим номер студента. Когда будут пройдены все строки таблицы В, мы перейдем ко второй строке таблицы А и будем сравнивать ее с каждой строкой таблицы В (на самом деле, когда мы рассматриваем п-ю строку таблицы А, то в таблице В необходимо рассмотреть только строки, номера которых больше п).
Результатом этого запроса будет:
Чтобы продемонстрировать использование ключевого слова NOT EXISTS, предположим, что мы хотим узнать имена студентов, которые записаны на все предметы (Операция ДЕЛЕНИЯ рел. Алгебры). По-другому это можно выразить так: нам нужны имена таких студентов, для которых не существует предметов, на которые они не были бы записаны. Это делается с помощью следующего запроса:
Дата добавления: 2015-07-08; просмотров: 217 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
FROM СТУДЕНТ. ЗАПИСЬ | | | SELECT СТУДЕНТ.Имя |