- •Реферат
- •Введение
- •1 Реляционные связи между таблицами баз данных
- •2 Язык sql
- •2.1 Структура запросов sql
- •2.2 Типы команд sql
- •3 Подзапросы
- •3.1 Описание подзапросов
- •3.2 Ограничение на подзапросы
- •3.3 Типы подзапросов
- •4 Операции изменения и обновления баз данных
- •4.1 Обновление бд
- •4.1 Изменение значения
- •Заключение
- •Список использованной литературы
3 Подзапросы
3.1 Описание подзапросов
Подзапрос – это оператор выбора, который содержится внутри другого оператора выбора, вставки, обновления или удаления, внутри условного оператора или внутри другого подзапроса.
Подзапросы обычно содержатся в предложениях where или having SQL оператора или в списке выбора этого оператора. С помощью подзапросов можно проводить дальнейший отбор данных из результатов других запросов. Оператор, содержащий подзапрос, может обрабатывать строки некоторой таблицы, основываясь на результатах вычисления списка выбора подзапроса, который в свою очередь может ссылаться на эту же таблицу как внешний запрос, или обращаться к другой таблице. В языке SQL подзапросы допускаются почти везде, где допускаются выражения, если подзапрос возвращает одно значение.
Операторы выбора, содержащие один или несколько подзапросов, называются также составными запросами или составными операторами выбора. Возможность включения одного оператора выбора внутрь другого является одной из причин, по которой язык SQL называется “структурированным” (Structured Query Language).
Оператор SQL, который включает подзапросы, называемые также внутренними запросами, можно иногда заменить соединением. Есть вопросы, которые можно сформулировать только с помощью подзапросов. Некоторые люди предпочитают всегда использовать подзапросы, поскольку находят их лёгкими для понимания. Другие стремятся их избегать всегда, когда это возможно.
3.2 Ограничение на подзапросы
На подзапросы накладываются следующие ограничения:
Подзапросы нельзя использовать в списках предложений order by, group by и compute by.
Подзапрос не может содержать предложения for browse или union.
Список выбора внутреннего подзапроса, которому предшествует операция сравнения, может содержать только одно выражение или название столбца, и подзапрос должен возвращать единственный результат. При этом тип данных столбца, указанного в конструкции where внешнего оператора, должен быть совместим c типом данных в столбце, указанным в списке выбора подзапроса (правила здесь такие же как и при соединении).
В подзапросах не допускаются текстовые (text) и графические (image) данные.
Подзапросы не могут обрабатывать свои результаты внутренним образом, т.е. подзапрос не может содержать конструкций order by, compute, или ключевого слова into.
Коррелирующиеся (повторяющиеся) подзапросы не допускаются в конструкции select обновляемого курсора, определенного с помощью declare cursor (определить курсор).
Количество вложенных уровней для подзапросов не должно превышать 16.
Максимальное число подзапросов на каждой стороне объединения не больше 16.
3.3 Типы подзапросов
Существуют два основных типа подзапросов:
Подзапросы, которым предшествует немодифицированная операция сравнения и которые возвращают единственное значение, называются подзапросами - выражениями (скалярными подзапросами).
Подзапросы, которые возвращают список значений и которым предшествует ключевое слово in (принадлежит) или операция сравнения, модифицированная кванторами any (некоторый) или all (все), а также подзапросы, проверяющие существование с помощью квантора exists (существует), называются квантифицированными предикатными подзапросами.
Подзапросы любого из этих типов могут быть либо коррелированными (повторяющимися), либо некоррелированными.
Некоррелированный подзапрос может вычисляться как независимый запрос. Иначе говоря, результаты подзапроса подставляются в основной оператор (или внешний запрос). Это не значит, что SQL-сервер именно так выполняет операторы с подзапросами. Некорреляционные подзапросы могут быть заменены соединением и будут выполняться как соединения SQL-сервером.
Коррелированные подзапросы не могут выполняться как независимые запросы, поскольку они могут обращаться к данным, находящихся в столбцах таблицы, указанной в списке from внешнего запроса.
