Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпора_базова.doc
Скачиваний:
12
Добавлен:
01.05.2025
Размер:
541 Кб
Скачать
☆
  1. Мова sql. Використання пропозиції exists.

EXISTS - це оператор, який виводить вірне або невірне значення, іншими словами, вираз Буля. Це означає, що він може працювати автономно в предикаті або в комбінації з іншими виразами Буля, що використовують Булеві оператори AND, OR, і NOT. Він бере підзапит як аргумент і оцінює його як вірний, якщо той робить будь-який вивід, або як невірний, якщо той не робить цього. Цим він відрізняється від інших операторів предиката, в яких він не може бути невідомим.

В співвіднесеному підзапиті, EXISTS оцінюється окремо для кожного рядка таблиці, ім'я якого вказано в зовнішньому запиті, так само як і інші оператори предиката, коли ви використовуєте співвіднесений підзапит. Це дає можливість використовувати EXISTS як вірний предикат, який генерує різні відповіді для кожного рядка таблиці вказаного в основному запиті. Отже, інформація з внутрішнього запиту, буде збережена, якщо виведена безпосередньо, коли ви використовуєте EXISTS таким чином.

Одна річ, яку EXISTS не може зробити - узяти функцію агрегату в підзапиті. Це має значення. Якщо функція агрегату знаходить будь-які рядки для операцій з ними, EXISTS вірний, не дивлячись на те, що це - значення функції; якщо ж агрегатна функція не знаходить ніяких рядків, EXISTS неправильний.

Спроба використовувати агрегати з EXISTS у такий спосіб, ймовірно покаже, що проблема невірно розв'язувалася від початку до кінця.

Можливі прикладні програми підзапитів можуть багато разів вкладатися. Ви можете вкладати їх два або більш в одиночний запит, і навіть один всередину іншого.

  1. Мова sql. Співвіднесений запит на вибірку.

Когда вы используете подзапросы в SQL, вы можете обратиться к внутреннему запросу таблицы в предложении внешнего запроса FROM , сформировав — соотнесенный подзапрос. Когда вы делаете это, подзапрос выполняется неоднократно, по одному разу для каждой строки таблицы основного запроса. Соотнесенный подзапрос — один из большого количества тонких понятий в SQL из-за сложности в его оценке. Если вы сумеете овладеть им, вы найдете что он очень мощный, потому что может выполнять сложные функции с помощью очень лаконичных указаний.

Строка внешнего запроса, для которого внутренний запрос каждый раз будет выполнен, называется — текущей строкой-кандидатом.

Также как предложение HAVING может брать подзапросы, он может брать и соотнесенные подзапросы. Когда вы используете соотнесенный подзапрос в предложении HAVING, вы должны ограничивать внешние ссылки к позициям, которые могли бы непосредственно использоваться в самом предложении HAVING. Вы можете вспомнить, что предложение HAVING может использовать только агрегатные функции, которые указаны в их предложении SELECT или поля, используемые в их предложении GROUP BY. Они являются только внешними ссылками, которые вы можете делать. Все это потому, что предикат предложения HAVING оценивается для каждой группы из внешнего запроса, а не для каждой строки. Следовательно, подзапрос будет выполняться один раз для каждой группы, выведенной из внешнего запроса, а не для каждой строки. Сам подзапрос не должен использовать предложения GROUP BY или HAVING.

Как вы и могли предположить, соотнесенные подзапросы по природе близки к объединениям — они оба включают проверку каждой строки одной таблицы с каждой строкой другой (или псевдонимом из той же) таблицы. Вы найдете, что большинство операций, которые могут выполняться с одним из них, будут также работать и с другим.