русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Загальні відомості


Дата добавления: 2015-07-09; просмотров: 451; Нарушение авторских прав


Обчислювальна потужність мови SQL забезпечується можливістю вкладення блоків повного оператора SELECT один в другий за допомогою їх включення в предикат опції WHERE. Далі ці можливості демонструються на прикладі дворівневих вкладень блоків SELECT, хоча може бути декілька рівнів, але на практиці в конкретній СКБД існують певні обмеження на кількість рівнів. При дворівневій структурі будемо зовнішній оператор SELECT називати ще другим, а внутрішній – першим. Внутрішні запити можуть бути поміщені в опції WHERE та/або HAVING, в цьому випадку вони отримують назву вкладених запитів або підзапитів. Крім того, внутрішні оператори SELECT можуть вживатися в операторах INSERT, UPDATE та DELETE.

Синтаксис підзапиту:

 
 
Початок зовнішнього оператора SELECT


SELECT [DISTINCT]

FROM <список таблиць

WHERE

{<вираз>[NOT]IN| <оператор порівнянняANY|ALL]

Підзапит, який описується в дужках
(SELECT [DISTINCT] <список вибору підзапиту>

FROM <список таблиць>

WHERE <умова>)

Не обов’язкові частини зовнішнього оператора SELECT
[GROUP BY < … >]

[HAVING < … >]

[ORDER BY < … >]

 

Як працює підзапит: підзапити повертають результати внутрішнього запиту в зовнішній.

Підзапити поділяються на такі типи:

1. Підзапити, які не повертають жодного або повертають декілька елементів (почінаються з IN або з оператора порівняння, які містять ключові слова ANY або ALL).

2. Підзапити, які повертають єдине значення (починаються з простого оператора порівняння). При цьому, за стандартом ISO, термін «єдине значення» означає як окреме значення певного стовпця, так і певний окремий рядок у вигляді кортежу значень певних полів, але в Jet SQL це не реалізовано.

3. Підзапити, які представляють собою тест на існування (починаються з EXISTS або NOT EXISTS).



5.3.5.2 Правила формулювання підзапитів

Ці правила в основному відносяться до списку вибору підзапиту з деякими додатковими обмеженнями на функції, які можна використовувати в підзапиті.

• Список вибору внутрішнього підзапиту, що починається з оператора чи порівняння IN, може включати тільки одне ім'я стовпця. Стовпець, ім'я якого ви вказуєте в WHERE зовнішнього оператора, повинний бути сумісним для з’єднання зі стовпцем, ім'я якого ви вказуєте в списку вибору підзапиту.

• Список вибору підзапиту, що починається з EXISTS, майже завжди включає "зірочку" (*). У даному випадку немає необхідності вказувати імена стовпців, оскільки ви лише виконуєте перевірку на існування (чи "не існування") будь-яких рядків, що задовольняють зазначеним критеріям, при цьому можна задати приналежність рядків таблицям у WHERE-підзапиті.) В інших випадках правила списку вибору для підзапиту, що починаєтьсязEXISTS, ідентичні правилам для стандартного списку вибору.

• Підзапити, що починаються з немодифікованого оператора порівняння (оператор порівняння, за яким не випливає ключове слово ANY або ALL), не можуть включати GROUP BY і HAVING, якщо тільки не визначено заздалегідь, що в результаті групування буде повертатися єдине значення.

• Підзапити не можуть маніпулювати своїми результатами усередині себе, тобто підзапит не може включати ORDER BY або ключове слово INTO.

5.3.5.3 Підзапити з оператором порівняння

Розглянемо, наприклад, задачу складання списку всіх викладачів, що мають мінімальну норму навантаження (ми не знаємо коду чи назви посади, що має мінімальну норму). За допомогою з’єднань цю задачу можна було б виконати в два прийоми.

1. Знайти мінімальну норму навантаження.

SELECT MIN(NormPost)

FROM POSADA;

Min-NormPost

2. Одержати прізвища викладачів, які мають таку норму.

SELECT VYKLADACH.PrizvVykl, POSADA.PostVykl, POSADA.NormPost

FROM VYKLADACH, POSADA

WHERE NormPost = 600;

Якщо зробити це з допомогою підзапиту, то нам буде потрібно тільки один оператор:

SELECT VYKLADACH.PrizvVykl, POSADA.PostVykl, POSADA.NormPost

FROM VYKLADACH INNER JOIN POSADA ON VYKLADACH.KodPost = POSADA.KodPost

WHERE (((POSADA.NormPost)=( SELECT MIN(NormPost) FROM POSADA)));

PrizvVykl PostVykl NormPost
Собчак А.О. професор
Махно Н.Є. професор
Мунтян Р.Д. професор
Середа І.С. професор

Здатність обчислювати значення агрегатної функції "на льоту" і повертати його в зовнішній запит для порівняння відноситься до переваг підзапитів; з’єднання не справляється з цією задачею.



<== предыдущая лекция | следующая лекция ==>
Групування даних. Опція GROUP BY | Підзапити з предикатом IN (NOT IN)


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.335 сек.