Конспект лекцій Суми Видавництво Сумду 2009 Міністерство освіти І науки України Сумський державний університет icon

Конспект лекцій Суми Видавництво Сумду 2009 Міністерство освіти І науки України Сумський державний університет




НазваКонспект лекцій Суми Видавництво Сумду 2009 Міністерство освіти І науки України Сумський державний університет
Сторінка8/19
Дата04.06.2013
Розмір1.62 Mb.
ТипКонспект
1   ...   4   5   6   7   8   9   10   11   ...   19
^

2.6 Використання підзапитів


Дуже зручним засобом, що дозволяє формулювати запити більш зрозумілим чином, є можливість використання підзапитів, вкладених в основний запит.

Приклад. Одержати список постачальників, статус яких менше максимального статусу у таблиці постачальників (порівняння з підзапитом):

SELECT *

FROM P

WHERE P.STATYS < (SELECT MAX(P.STATUS)

FROM P;

Тоді як поле P.STATUS рівняється з результатом підзапиту, то підзапит повинен бути сформульований так, щоб повертати таблицю, що складається рівно з одного рядка й однієї колонки.

Результат виконання запиту буде еквівалентний результату такої послідовності дій:

  1. Виконати один раз вкладений підзапит й одержати максимальне значення статусу.

  2. Просканувати таблицю постачальників P, щоразу порівнюючи значення статусу постачальника з результатом підзапиту, і відібрати тільки ті рядки, у яких статус менше максимального.

^ Приклад. Використання предиката IN. Одержати перелік постачальників, що поставляють деталь номер 2:

SELECT *

FROM P

WHERE P.PNUM IN (SELECT DISTINCT PD.PNUM

FROM PD WHERE PD.DNUM = 2);

У цьому випадку вкладений підзапит може повертати таблицю, що містить кілька рядків.

Результат виконання запиту буде еквівалентний результату такої послідовності дій:

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

  2. Просканувати таблицю постачальників P, щораз перевіряючи, чи втримується номер постачальника в результаті підзапиту.

^ Приклад. Використання предиката EXIST. Одержати перелік постачальників, що поставляють деталь номер 2:

SELECT *

FROM P

WHERE EXIST (SELECT *

FROM PD

WHERE PD.PNUM = P.PNUM AND PD.DNUM = 2);

Результат виконання запиту буде еквівалентний результату такої послідовності дій:

  1. Просканувати таблицю постачальників P, щоразу виконуючи підзапит із новим значенням номера постачальника, узятим із таблиці P.

  2. У результат запиту включити тільки ті рядки з таблиці постачальників, для яких вкладений підзапит повернув непусту множину рядків.

На відміну від двох попередніх прикладів, вкладений підзапит містить параметр (зовнішнє посилання), переданий з основного запиту - номер постачальника P.PNUM. Такі підзапити називаються корельованими (correlated). Зовнішнє посилання може приймати різні значення для кожного рядка-кандидата, оцінюваного за допомогою підзапиту, тому підзапит повинен виконуватися заново для кожного рядка, який відбирається в основному запиті. Такі підзапити характерні для предиката EXIST, але можуть бути використані й в інших підзапитах.

Може здатися, що запити, які містять корельовані підзапити будуть виконуватися повільніше, ніж запити з некорельованими підзапитами. Насправді це не так, тому що те, як користувач сформулював запит, не визначає, як цей запит буде виконуватися. Мова SQL є не процедурною, а декларативною. Це значить, що користувач, який формулює запит, просто описує, яким повинен бути результат запиту, а як цей результат буде отриманий - за це відповідає сама СКБД.

^ Приклад. Використання предиката NOT EXIST. Одержати перелік постачальників, що не поставляють деталь номер 2:

SELECT *

FROM P

WHERE NOT EXIST (SELECT *

FROM PD

WHERE PD.PNUM = P.PNUM AND PD.DNUM = 2);

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

Приклад. Одержати імена постачальників, що поставляють всі деталі:

SELECT DISTINCT PNAME FROM P

WHERE NOT EXIST (SELECT *

FROM D

WHERE NOT EXIST (SELECT *

FROM PD

WHERE PD.DNUM = D.DNUM AND

PD.PNUM = P.PNUM));

Даний запит містить два вкладених підзапитів й реалізує реляційну операцію розподілу відношень.

Самий внутрішній підзапит параметризований двома параметрами (D.DNUM, P.PNUM) і має такий зміст: відібрати всі рядки, що містять дані про поставки постачальника з номером PNUM деталі з номером DNUM. Заперечення NOT EXIST говорить про те, що даний постачальник не поставляє дану деталь. Зовнішній до нього підзапит, сам є вкладеним і параметризованим параметром P.PNUM, має зміст: відібрати перелік деталей, які не поставляються постачальником PNUM. Заперечення NOT EXIST говорить про те, що для постачальника з номером PNUM не повинно бути деталей, які не поставлялися б цим постачальником. Це в точності означає, що в зовнішньому запиті відбираються тільки постачальники, що поставляють всі деталі.
^

2.7 Використання об'єднання, перетинання й різниці


Приклад. Одержати імена постачальників, що мають статус, більший 3 або, що поставляють хоча б одну деталь номер 2 (об'єднання двох підзапитів - ключове слово UNION):

SELECT P.PNAME

FROM P

WHERE P.STATUS > 3 UNION SELECT P.PNAME

FROM P, PD

WHERE P.PNUM = PD.PNUM AND

PD.DNUM = 2;

Результуючі таблиці поєднуваних запитів повинні бути сумісні, тобто мати однакову кількість стовпців й однакові типи стовпців у порядку їхнього перерахування. Не потрібно, щоб поєднувані таблиці мали б однакові імена колонок. Це відрізняє операцію об'єднання запитів у SQL від операції об'єднання у реляційній алгебрі. Найменування колонок у результуючому запиті будуть автоматично взяті з результату першого запиту в об'єднанні.

Приклад. Одержати імена постачальників, що мають статус, більший 3 й одночасно поставляють хоча б одну деталь номер 2 (перетинання двох підзапитів - ключове слово INTERSECT):

SELECT P.PNAME

FROM P

WHERE P.STATUS > 3 INTERSECT

SELECT P.PNAME

FROM P, PD

WHERE P.PNUM = PD.PNUM AND

PD.DNUM = 2;

Приклад. Одержати імена постачальників, що мають статус, більший 3, за винятком тих, хто поставляє хоча б одну деталь номер 2 (різниця двох підзапитів - ключове слово EXCEPT):

SELECT P.PNAME

FROM P

WHERE P.STATUS > 3 EXCEPT

SELECT P.PNAME

ROM P, PD

WHERE P.PNUM = PD.PNUM AND

PD.DNUM = 2;
1   ...   4   5   6   7   8   9   10   11   ...   19

Схожі:

Конспект лекцій Суми Видавництво Сумду 2009 Міністерство освіти І науки України Сумський державний університет iconКонспект лекцій Суми Сумський державний університет 2012 Міністерство освіти і науки, молоді та спорту України Сумський державний університет
Внутрішній економічний механізм підприємства: конспект лекцій / укладач Н. В. Мішеніна.– Суми : Сумський державний університет, 2012....
Конспект лекцій Суми Видавництво Сумду 2009 Міністерство освіти І науки України Сумський державний університет iconКонспект лекцій Суми Видавництво Сумду 2010 міністерство освіти І науки україНи
Затверджено на засіданні кафедри фінансів як конспект лекцій з дисципліни "Інформаційні системи і технології у фінансах"
Конспект лекцій Суми Видавництво Сумду 2009 Міністерство освіти І науки України Сумський державний університет iconМіністерство освіти І науки україни сумський державний університет до друку та в світ дозволяю на підставі «Єдиних правил»
Методи прийняття управлінських рішень. Конспект лекцій / Укладач Д. О. Смоленніков. – Суми: Вид-во СумДУ, 2008. – 89 с
Конспект лекцій Суми Видавництво Сумду 2009 Міністерство освіти І науки України Сумський державний університет iconКонспект лекцій Суми Видавництво Сумду 2009
Внутрішній економічний механізм підприємства: Конспект лекцій/ Укладач І. В. Новикова. – Суми: Вид-во СумДУ, 2009. – 185с
Конспект лекцій Суми Видавництво Сумду 2009 Міністерство освіти І науки України Сумський державний університет iconМіністерство освіти І науки україНи Сумський державний університет Менеджмент персоналу
Менеджмент персоналу: конспект лекцій / Укладач: К. В. Ілляшенко. – Суми: Вид-во СумДУ, 2010. – 78с
Конспект лекцій Суми Видавництво Сумду 2009 Міністерство освіти І науки України Сумський державний університет iconКонспект лекцій Суми Видавництво Сумду 2009
Психологія творчості : Конспект лекцій / Укладач О. А. Кривопишина.– Суми: Вид-во СумДУ, 2009.– 81 с
Конспект лекцій Суми Видавництво Сумду 2009 Міністерство освіти І науки України Сумський державний університет iconКонспект лекцій Суми Видавництво Сумду 2009
Психологія творчості : Конспект лекцій / Укладач О. А. Кривопишина.– Суми: Вид-во СумДУ, 2009.– 81 с
Конспект лекцій Суми Видавництво Сумду 2009 Міністерство освіти І науки України Сумський державний університет iconМіністерство освіти І науки україни сумський державний університет граматичні таблиці з української мови для студентів-іноземців підготовчого відділення Суми Видавництво СумДУ
Граматичні таблиці з української мови для студентів-іноземців підготовчого відділення / Уклад.: Н. О. Ворона, Т. О. Дегтярьова, Н....
Конспект лекцій Суми Видавництво Сумду 2009 Міністерство освіти І науки України Сумський державний університет iconМіністерство освіти І науки україни сумський державний університет історія України
України: навчальні матеріали для студентів-іноземців підготовчого відділення / Укладачі: М. С. Казанджиєва, О. П. Коньок, Н. О. Тубол,...
Конспект лекцій Суми Видавництво Сумду 2009 Міністерство освіти І науки України Сумський державний університет iconМіністерство освіти І науки україни сумський державний університет медичний інститут кафедра інфекційних хвороб І епідеміології
Методичні рекомендації до семінарських занять лікарів-інтернів спеціальності “Інфекційні хвороби” / Укладачі М. Д. Чемич, Н.І. Ільїна,...
Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©zavantag.com 2000-2013
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи