Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОО__1_6_укр.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.65 Mб
Скачать

3.6. Підлеглі запити

Підлеглим запитом називається інструкція select, вкладена в інструкцію

SELECT, SELECT. .INTO, INSERT .. INTO, DELETE, UPDATE або у інший підлеглий запит. Підлеглий запит можна використовувати замість виразу в списку полів інструкції select або у виразах where і having. Можливі три варіанти синтаксису підлеглого запиту :

1) <вираз> <оператор порівняння> [ANY|ALL|SOME]

((<інструкція SELECT>)

  1. <вираз> [NOT] IN (<інструкція SELECT>)

  2. [NOT] EXISTS (<інструкція SELECT>)

Тут оператор порівняння - це арифметичний оператор порівняння, наприклад =. В підлеглих запитах не слід використовувати повні імена.

У першому варіанті вираз порівнюється з деякими або усіма значеннями стовпця, що повертається підлеглим запитом. Якщо не використовуються предикати any, all, some, то підлеглий запит повинен повертати тільки одне значення. Наприклад, щоб отримати оцінки студента Іванова, можна використати запит (якщо ми упевнені, що прізвище Іванов зустрічається тільки один раз)

Очевидно, що такий самий результат можна отримати, використовуючи об'єднання таблиць.

При використанні предиката all результат порівняння істинний, якщо істинні усі порівняння <вирази> зі значеннями, що повертаються підлеглим запитом. При використанні предиката any або його синоніма some результат істинний, якщо істинне хоча б одне порівняння <виразу> з будь-яким із значень, що повертаються підлеглим запитом.

У другому варіанті підлеглого запиту предикат in використовується для відбору в головному запиті тільки тих записів, які містять значення, рівні одному з відібраних підлеглим запитом. Предикат in використовується, якщо підлеглий запит повертає більш за одне значення, на відміну від предикатів any, all, some перевіряє тільки рівність значень.

У третьому варіанті підлеглого запиту предикат exists набуває значення Істина, якщо підлеглий запит повертає хоч би один рядок.

Якщо підлеглий запит посилається на запит або таблицю, вказану в пропозиції from зовнішнього запиту, то такий запит називається пов'язаним підлеглим запитом. Пов'язаний підзапит виконується для кожного рядка зовнішньої таблиці. Наприклад, знайдемо прізвища усіх атестованих студентів групи 01АО1 (запит дещо надуманий і його простіше реалізувати, використовуючи пов'язані таблиці) :

3.7. Запити на об'єднання

Це специфічні запити, які можуть бути створені тільки засобами SQL. Запит на об'єднання використовує оператор union і об'єднує результати декількох незалежних запитів або таблиць. Запит має наступний синтаксис:

Записи, що за умовчанням повторюються, не повертаються, предикат all гарантує повернення усіх записів. Усі запити, включені в операцію union, повинні відбирати однакове число полів, при цьому типи даних і розміри полів не обов'язково повинні співпадати. Як імена полів використовуються імена стовпців першої таблиці/запиту. За умовчанням рядки результату сортуються за збільшенням першого стовпця результату. Як остання пропозиція операції union може бути використана пропозиція order by, що дозволяє сортувати результат за декількома стовпцями. У цьому виразі використовуються номери стовпців або імена з першої таблиці/запиту. Псевдоніми можна використовувати тільки в першій таблиці/запиті, в інших вони пропускаються. У кожному з запитів, що об’єднуються, допускається використання пропозиції group by або having для групування результатів.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]