Программирование >>  Формирование связанных подзапросов 

1 [ 2 ] 3 4 5 ... 15


у которых стипендия совпадает с максимальным значением стипендии для города, в котором живет студент.

6. Напишите запрос, который позволяет вывести имена и идентификаторы всех студентов, для которых точно известно, что они про живают в городе, где нет ни одного университета.

7. Напишите два запроса, которые позволяют вывести имена и идеи тификаторы всех студентов, для которых точно известно, что он проживают не в том городе, где расположен их университет. Оди запрос с использованием соединения, а другой - с использовани ем связанного подзапроса.

2.11. Использование оператора EXISTS

Используемый в SQL оператор EXISTS (существует) гене рирует значение истина или ложь, подобно булеву выражению Используя подзапросы в качестве аргумента, этот операто оценивает результат выполнения подзапроса как истинный если этот подзапрос генерирует вхходные данные, то ест в случае существования (возврата) хотя бы одного найденного значения. В противном случае результат подзапроса ложный Оператор EXISTS не может принимать значение UNKNOWN (не известно).

Пусть, например, нужно извлечь из таблице! EXAM MARK данные о студентах, получивших хотя бы одну неудовлетвори тельную оценку.

SELECT DISTINCT STUDENT ID FROM EXAM MARKS A where EXISTS (SE * FROM EXAM MARKS В where MARK < 3

AND B.STUDENT ID = A.STUDENT ID);

При использовании связанных подзапросов предложение EXISTS анализирует каждую строку таблицы, на которую имеется ссылка во внешнем запросе. Главный запрос получает строки-кандидаты на проверку условия. Для каждой строки-кандидата выполняется подзапрос. Как только подзапрос находит



2.11. Использование оператора EXISTS 57

строку, где в столбце MARK значение удовлетворяет условию, он прекращает втполнение и возвращает значение истина внешнему запросу, который затем анализирует свою строку-кандидата.

Например, требуется получить идентификаторы предметов обучения, экзамены по которым сдавались не одним, а несколькими студентами:

SELECT DISTINCT SUBJ ID FROM EXAM MARKS A WHERE EXISTS (SELECT * FROM EXAM MARKS В WHERE A.SUBJ ID = B.SUBJ ID

AND A.STUDENT ID < > В.STUDENT ID);

Часто EXISTS применяется с оператором NOT (по-русски NOT EXISTS интерпретируется, как не существует ). Если предыхдущий запрос сформулировать следующим образом - найти идентификаторы предметов обучения, которые сдавались одним, и только одним студентом (другими словами, для которых не существует другого сдававшего студента), то достаточно просто поставить NOT перед EXISTS.

Следует иметь в виду, что в подзапросе, указтваемом в операторе EXISTS, нельзя использовать агрегирующие функции.

Возможности применения вложенных запросов весьма разнообразна:. Например, пусть из таблица: STUDENT требуется извлечь строки для каждого студента, сдавшего более одного I предмета.

SELECT *

FROM STUDENT FIRST WHERE EXISTS

(SELECT SUBJ ID

FROM EXAM MARKS SECOND

GROUP by SUBJ ID

HAVING COUNT (SUBJ IDj > 1

WHERE FIRST.STUDENT ID = SECOND.STUDENT H);



Упражнения

1. Напишите запрос с EXISTS, позволяющий вывести данные обо всех студентах, обучающихся в вузах, которые имеют рейтинг выше 300

2. Напишите предхдущий запрос, используя соединения.

3. Напишите запрос с EXISTS, выбирающий сведения обо всех студентах, для котор1х в том же городе, где живет студент, существуют университеты, в которых он не учится.

4. Напишите запрос, выбирающий из таблицы SUBJECT данные о названиях предметов обучения, экзамены по которым сданы более чем одним студентом.

2.12. Операторы сравнения значений IN, ANY, All

с множеством

Операторы сравнения с множеством значений имеют следующий смтсл.

Равно любому из значений, полученнтх во внутреннем запросе.

NOT IN

Не равно ни одному из значений, полученных во внутреннем запросе.

= ANY

То же, что и IN, Соответствует логическому оператору OR.

> ANY, > = ANY

Больше, чем (либо больше или равно) любое полученное число. Эквивалентно > или > = для самого меньшего полученного числа.

< ANY, < = ANY

Меньше, чем (либо меньше или равно) любое полученное число. Эквивалент < или < = для самого большего полученного числа.

= ALL

Равно всем полученным значениям. Эквивалентно логическому оператору AND

> ALL, > = ALL

Больше, чем (либо больше или равно) все полученные числа. Эквивалент > или > = для самого большего полученного числа.



1 [ 2 ] 3 4 5 ... 15

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика