МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
Національний університет «Львівська політехніка»
Кафедра САПР
З В І Т
про виконання лабораторної роботи № 7-8
на тему:
«Робота із вкладеними запитами. Об’єднання таблиць»
з курсу:
«Проектування банків даних для комп’ютерних систем проектування»
Львів – 2010
МЕТА РОБОТИ
Ознайомлення роботи з вкладеними запитами, а також вивчити їх основні можливості. Навчитися об’єднувати таблиці, робити складні запити.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Підзапитом називають запит selectякий включається в інший запит як параметр або вираз. Вони зазвичай використовуються, щоб генерувати значення або набір результатів, які використовуються в умовах головного запиту.
Співвіднесений підзапит є єдиною відмінністю між записами для головного запиту, оскільки тільки він залежить від значень, які міняються від запису до запису. interbase виконує такий підзапит багато раз, по разу для кожного запису батьківського підзапиту. Обчислення кожного запису є великим програшем в продуктивності по відношенню до незв'язаного підзапиту. interbase оптимізує незв'язані підзапити зовні циклі, виконує їх тільки один раз, використовуючи потім результати як окремий набір даних.
Ось приклад зв'язаного підзапиту:
select *
from department d
where exists
( select *
from employee e
where e.emp_no = d.mngr_no
and e.job_country = 'england')
А ось приклад ідентичного запиту з використанням об'єднання:
select d.*
from department d join employee e on d.mngr_no = e.emp_no
where e.job_country = 'england'
План виконання запиту. План описує сценарій, по якому оптимізатор вирішив виконати запит. Для деяких типів запитів оптимізатор не в змозі вибрати реально оптимальний план. Людина може проаналізувати різні плани і, вибравши потрібний, перекрити їм план, вибраний оптимізатором. Результатом може бути приголомшливе збільшення швидкості на деяких типах запитів. У самих запущених випадках можна зменшити час виконання 15-ти хвилинного запиту до трьох секунд.
Можливість указувати план запиту була додана в gpre і dsql/isql. Таким чином, пряма вказівка плану запиту працюватиме в тілі перегляду(view), процедурі, що зберігається, або трігері.
Підготовка запитів і параметри запиту
interbase підтримує запити з параметром в dsql для тих випадків, коли вказаний запит виконуватиметься кілька разів з різними значеннями. Наприклад, заповнення таблиці даними може вимагати серію команд insert із значеннями для кожного запису. Застосування запитів, що параметризуються, безпосередньо збільшує продуктивність, оскільки interbase зберігає внутрішнє представлення запиту і його оптимізований план після одноразової підготовка запиту.
Використання запитів, що параметризуються, в delphi відбувається наступними кроками:
Помістите пойменований параметр в запиті на місці постійної величини. interbase не підтримує параметри ніде, окрім як в константах, таблиці і імена полів не можуть описуватися параметром.
Підготуйте запит, використовуючи для цього метод prepare компоненту tquery. delphi готує запит, якщо він ще не підготовлений кожного разу перед виконанням. Після виконання запиту його підготовка автоматично знімається. Таким чином, підготовка запиту заздалегідь запобігає безглуздій підготовці і відміні підготовки при каждім виклику запиту.
Привласніть параметри. Наприклад, для компоненту tquery використовуйте для цього метод parambyname.
Виконаєте запит. Вирази select повинні відкриватися методом open, а insert, update і delete повинні активуватися метом execsql.
Відмінити підготовку запиту. Це робиться методом unprepear компоненту tquery.
У деяких реальних випадках, що включають дії, що повторюються, використання запитів, що параметризуються, збільшує продуктивність на 100%
ПОСТАНОВКА ЗАВДАННЯ
Бібліотека обслуговує читачів. Вона складається з читальних залів. На кожного читача заведена карточка яка містить інформацію про читача і прочитані книги. В читальному залі працює персонал. Існує абонемент.
ВИКОНАННЯ РОБОТИ
Робота із вкладеними запитами
1.
SELECT misce
FROM bilet
WHERE vagon = '11';
2.
SELECT imya , pobatkovi, prizvushche
FROM pasagur
WHERE nomer_poizdy IN (111,12,156)
3.
SELECT prizvushche
FROM pasagur
WHERE nomer_poizdy IN (SELECT nomer_poizdy
FROM poizd
WHERE tup_poizdy = 'diesel');
4.
SELECT providnuk
FROM vagon
WHERE vagon IN (SELECT vagon
FROM bilet
WHERE kinceva_stanciya IN (SELECT kinceva_stanciya
FROM poizd
WHERE chas_prubyttya));
Об’єднання таблиць
SELECT prizvushche,imya,kinceva_stanciya,cina
FROM pasagur, bilet
WHERE pasagur.nomer_bilety=bilet.misce
ORDER BY prizvushche;
SELECT vagon,zavod,vugotovleuy
FROM harakterustuka_vagony
WHERE vagon in (SELECT vagon FROM bilet
WHERE cina > 15);
SELECT p1.prizvushche,p2.imya
FROM pasagur AS p1,pasagur AS p2
WHERE p1.nomer_bilety = p2.nomer_bilety
AND p1.nomer_bilety < 50;
SELECT pasagur.prizvushche,pasagur.seriya_documenta,poizd.data_vidpravlennya,poizd.chas_vidpravlennya
FROM pasagur LEFT OUTER JOIN poizd
ON pasagur.nomer_poizdy = poizd.nomer_poizdy;
ВИСНОВОК
На даній лабораторній роботі, я навчився створювати вкладені запити. Розробив до своєї бази даних дані запити, і побачив що вони працюють і виводять коректні результати.