6.3. Подзапросы Язык SQL позволяет использовать один запрос в качестве вспомогательного при вычислении другого запроса. Запросы которые являются частью более «крупного» подзапроса, принято называть подзапросом (subquery). Степень взаимной вложенности запросов не ограничивается и может быть произвольной. Существует четыре типа использования подзапросов: · Запросы с использованием UNION, INTERCECT и EXCEPT. · Подзапрос возвращает единственное значение, которое сравнивается с другим значением в условии WHERE · Запрос возвращает отношение, используемое в выражении WHERE с той или иной целью · Запрос оперирует отношениями, перечисленными в предложении в предложении FROM Подзапросы для вычисления скалярных значенийАтомарное значение, способное выступать в качестве содержимого одного компоненты кортежа отношения называют скаляром (scalar). Запросы вида SELECT - FROM - WHERE могут возвращать отношения с любым количеством атрибутов и кортежей. Однако, зачастую необходимо получать одно единственное значение. Если запрос возвращает единственное значение, он может быть использован в качестве подзапроса, заключенного в круглые скобки и располагаемого в любом месте предложения WHERE, где допустимо использование скалярного значения. Условия уровня отношенияВ SQL предусмотрен ряд операторов, которые применяются к некоторому отношению R в целом, и возвращают скалярное значение булева типа. Некоторые из операторов EXISTS ,IN, ANY, ALL. · Условие EXISTS R равно TRUE, если и только если R не пусто. · Условие s IN R равно, если и только если s равно одному из значений в R. Напротив s NOT IN R обращается в TRUE, если и только если s не равно ни одному из значений в R. · Условие s>ALL R равно TRUE тогда и только тогда если s превосходит все значения в R. Оператор > может быть заменен на =, >=, <=, <, <>. Выражения s<> ALL R и s NOT IN R эквивалентны · Условие s>ANY R равно TRUE, если и только если s превосходит по меньшей мере одно значение из R. Выражения s=ANY R и s IN R эквивалентны. Условия уровня кортежаSELECT * FROM R WHERE (A, B) IN (SELECT C, D FROM S) Подзапросы в предложениях FROMПодзапросы могут использоваться в качестве отношений. Выражения соединения SQLДекартово произведение = CROSS JOIN Тета-соединение = R JOIN S ON R.FIELD1=S.FIELD2 Естественное соединение = NATURAL JOIN Внешнее соединение = NATURAL FULL OUTER JOIN NATURAL LEFT OUTER JOIN NATURAL RIGHT OUTER JOIN
|