Лабораторна робота №5 на тему Створення подань View, Проектування баз даних, ЗНТУ
« Назад5. Лабораторна робота №5 на тему Створення подань ViewПодання (View) є об‘єктом, який не містить власних даних, а бере їх з інших відношень за допомогою виконання запиту. Первісні відношення називають базовими таблицями, а подання визначаються на їхній основі. Перевага застосування подання полягає в тому, що в ньому можна відображувати тільки потрібні поля таблиць, а інші приховувати. Вміст подання не фіксується, а повторно вираховується кожного разу, коли є посилання на подання. Як і до будь-якої таблиці, до подання можна створювати запити, виконувати оновлення, вставку, вилучення і з‘єднання з іншими базовими таблицями і поданнями, якщо клієнт має потрібні права доступу. Задача 5.1 Вивести перелік всіх конференцій, які відбулися у Києві. Упорядкувати список за датою. Для створення подання треба у вікні проекту на вкладці Запросы вибрати пункти Создать – Конструктор представления. Відкриється конструктор і вікно Добавление таблицы, яке дозволяє добавити таблиці, подання та функції. Добавимо таблицю Conference. Вікно конструктора може містити частини: Схема, Сетка та SQL (див. рис. 5.1). За допомогою кнопок панелі інструментів можна відміняти їхнє відображення. Дії, які виконує клієнт в будь-якій частині, автоматично вносяться до інших частин. Можна в частині Схема встановити прапорці на потрібних полях, а можна вибрати їх зі списку в першому стовпчику частини Сетка. Заголовки полів у поданні записують в стовпчику Псевдоним. Виберемо потрібні поля, в частині Сетка вкажемо поле для сортування – Date_begin, виберемо зі списку тип сортування – по возрастанию та запишемо критерій для поля City (місто Київ). Для запису символьних констант в SQL Server на мові Transact – SQL використовуємо синтаксис: WHERE City = N 'Київ' (див. додаток А). Рисунок 5.1 – Конструктор подання задачі 5.1 Можна створювати SQL – код самостійно. Тоді синтаксис коду можна перевіряти за допомогою відповідної кнопки, а в інших частинах автоматично відбуваються зміни. Результат подання – на рис. 5.2. Рисунок 5.2 – Результат роботи подання задачі 5.1 Задача 5.2 Вивести упорядкований за датою перелік всіх конференцій, які відбудуться у вказаному місті. Рисунок 5.3 – Конструктор процедури задачі 5.2 Місто вводиться як параметр. Тому на відміну від попередньої задачі створюється не подання, а збережена процедура (див. рис. 5.3). Для використання параметру застосовується вираз: WHERE (dbo.Conference.City = @введіть_місто) Знак @ є ознакою імені локальної змінної та використовується для позначення імен параметрів функцій і збережених процедур. В іменах параметрів за звичай використовують символ підкреслення замість пробілу. Після запуску процедури виводиться вікно для введення параметру – назви міста (див. рис. 5.4). Результат – на рис. 5.5. Рисунок 5.4 – Вікно для введення параметру Рисунок 5.5 – Результат роботи процедури задачі 5.2 Задача 5.3 Вивести перелік всіх країн, в яких відбулися конференції з травня по грудень 2009 року. Для запису умов для року та місяця створимо обчислювальні поля. Функція Month (Conference.Date_begin) визначає номер місяця, а функція Year (Conference.Date_begin) – рік. В розділіFROM команди SELECT вказуються таблиці і подання для вибірки даних та визначаються типи зв’язків між ними. При використанні ключових слів INNERJOIN обираються тільки ті рядки з обох таблиць, що задовольняють умові з’єднання. Цей варіант встановлюється за замовчанням. При використанні ключових слів LEFT [OUTER] JOIN до результату будуть включені всі рядки з лівої таблиці, незалежно від того, чи є для них відповідні рядки в правій таблиці, і тільки ті рядки з іншої таблиці, що задовольняють умові з’єднання. При цьому, якщо в правій таблиці немає зв’язаних записів, замість відповідних значень будуть відображуватися значення NULL. При використанні ключових слів RIGHT [OUTER] JOIN до результату будуть включені всі рядки з правої таблиці, незалежно від того, чи є для них відповідні рядки в лівій таблиці, і тільки ті рядки з іншої таблиці, що задовольняють умові з’єднання. При цьому, якщо в лівій таблиці немає зв’язаних записів, замість відповідних значень будуть відображуватися значення NULL. При використанні ключових слів FULL [OUTER] JOIN до результату будуть включені всі рядки з обох таблиць: як ті, що задовольняють умові з’єднання, так і ті, що не задовольняють. При використанні ключових слів CROSSJOIN кожний рядок лівої таблиці зв’язується з кожним рядком правої таблиці. Кількість рядків в результаті дорівнює добутку кількості рядків обох таблиць. Наприклад, SELECT dbo.Country.Country, dbo.Conference.Conference_ID, dbo.Conference.Place, dbo.Conference.City FROM dbo.Country CROSS JOIN dbo.Conference Використаємо RIGHT OUTER JOIN – з’єднання таблиць праворуч. Тоді будуть виведені тільки потрібні країни. Для того, щоб їхні назви не повторювалися, використаємо параметр DISTINCT. В умовах даної предметної області для кожного запису таблиці Conference існує зв’язаний запис в таблиці Country. Тому, якщо не змінювати тип з’єднання таблиць, а залишити INNERJOIN, результат будетакий же самий. Тип зв’язку можна задати в команді SQL або виділити лінію зв’язку між таблицями та встановити в контекстно – залежному меню або і вікні Свойства потрібні прапорці: Включить строки Все строки с Country Все строки с Conference Конструктор подання матиме такий вигляд, як на рис. 5.6. Після запуску подання буде виведений потрібний перелік (див. рис. 5.7). Рисунок 5.6 – Конструктор подання задачі 5.3 Рисунок 5.7 – Результат роботи подання задачі 5.3 Задача 5.4 Вивести інформацію про конференції, які починаються о певній даті, наприклад, 2 листопада.2009 року. Створимо подання з полями таблиць Conference і Country. Дату (2.11.2009) запишемо в стовпчику Критерий. Вона буде автоматично змінена на текстову константу, в SQL – коді буде використана функція CONVERT (див. додаток А), яка перетворить її до формату дати (datetime), а саме: WHERE (dbo.Conference.Date_begin = CONVERT(DATETIME, '2009-11-02 00:00:00', 102)) Рисунок 5.8 – Конструктор подання задачі 5.4 Рисунок 5.9 – Результат роботи подання задачі 5.4 Якщо дату задавати як параметр, то треба буде створювати збережену процедуру та вводити дату в будь-якому форматі дати. Задача 5.5 Для конференцій, які відбулися в Києві або Москві, підрахувати кількість доповідей. Включимо до подання таблиці Conference та Material, а також таблицю Section, через яку ці дві таблиці зв’язані в схемі даних.. Кількість доповідей підрахуємо за допомогою функції COUNT. Для угруповання виберемо поля Name, Place та City таблиці Conference, а для поля City задамо умови відбору (Київ або Москва). Конструктор подання – на рис. 5.10, результат – на рис. 5.11. SQL – код матиме такий вигляд: SELECT dbo.Conference.Name AS назва, dbo.Conference.City AS місто, dbo.Conference.Place AS [де відбулась], COUNT(dbo.Material.Material_ID) AS [кількість доповідей] FROM dbo.Conference INNER JOIN dbo.Section ON dbo.Conference.Conference_ID = dbo.Section.Conference_ID INNER JOIN dbo.Material ON dbo.Section.Section_ID = dbo.Material.Section_ID GROUP BY dbo.Conference.Name, dbo.Conference.Place, dbo.Conference.City HAVING (dbo.Conference.City = N'Київ') OR (dbo.Conference.City = N'Москва' ) Рисунок 5.10 – Схема конструктора подання задачі 5.5 Рисунок 5.11 – Результат роботи подання задачі 5.5 5.2 Збережені процедуриЗбережені процедури на відміну від подань дозволяють не тільки вибирати дані з таблиць, а ще й змінювати їх. Задача 5.6 Створити нову архівну таблицю та записати до неї відомості про конференції, які вже відбулися. Створимо збережену процедуру. В Конструкторі вкажемо поля з таблиць Country та Conference. В меню Запрос виберемо пункт Запрос на создание таблицы. У вікні, що відкриється, вкажемо ім’я нової таблиці – архів. Для умов відбору використаємо функцію GETDATE(), яка повертає системну дату та час. SQL – код для задачі 5.6 SELECT dbo.Country.Country AS країна, dbo.Conference.Conference_ID, dbo.Conference.Name AS назва, dbo.Conference.City AS місто, dbo.Conference.Place AS [де проходила], dbo.Conference.Date_begin AS початок, dbo.Conference.Date_end AS кінець, dbo.Conference.Tel AS телефон INTO dbo.архів FROM dbo.Country INNER JOIN dbo.Conference ON dbo.Country.Country_ID = dbo.Conference.Country_ID WHERE (dbo.Conference.Date_begin < GETDATE()) Буде створена нова таблиця архів з вибраними полями та вказаними заголовками. Далі треба в конструкторі цієї таблиці задати ключове поле. Це може бути поле Conference_ID. А можна вставити нове ключове поле Код з властивостями, як на рис. 5.12. Значення до нього будуть заноситись автоматично. Задача 5.7 Доповнити архівну таблицю відомостями про конференції, які відбулися в минулому році. Відкриємо конструктор процедури попередньої задачі та збережемо її під іншим іменем. Змінимо тип процедури. В меню Запрос виберемо пункт Добавление. Відкриється вікні, в якому виберемо зі списку таблицю архів, до якої треба вставити дані. Виберемо всі ті ж самі поля, що і в задачі 5.6. Проте обов’язково треба вставляти тільки поле Conference_ID, тому що в таблиці архів для нього заборонено значення Null. Вибір інших полів не має значення. Псевдоніми теж можна не задавати. Вибір даних за минулий рік (2009) задамо таким чином: WHERE (YEAR(dbo.Conference.Date_begin) = 2009) Рисунок 5.12 – Конструктор таблиці архів Рисунок 5.13 – Сітка конструктора процедури задачі 5.7 Конструктор збереженної процедури та SQL – код матимуть однаковий вигляд (див. рис. 5.13), незалежно від того, чи є в таблиці архів поле Код. SQL– код для задачі 5.7 INSERT INTO dbo.архів (країна, Conference_ID, назва, місто, [де проходила], початок, кінець, телефон) SELECT dbo.Country.Country, dbo.Conference.Conference_ID, dbo.Conference.Name, dbo.Conference.City, dbo.Conference.Place, dbo.Conference.Date_begin, dbo.Conference.Date_end, dbo.Conference.Tel FROM dbo.Country INNER JOIN dbo.Conference ON dbo.Country.Country_ID = dbo.Conference.Country_ID WHERE (YEAR(dbo.Conference.Date_begin) = 2009) Після запуску процедури до таблиці архів будуть добавлені нові дані. Якщо ключовим полем є поле Conference_ID, то добавити ті ж самі дані ще раз буде неможливо. При цьому буде виведене повідомлення про помилку (див. рис. 5.14). Рисунок 5.14 – Повідомлення про помилку Якщо ключовим буде встановлено поле Код типу Счетчик, то можна буде дописувати ці дані багато разів. Задача 5.8 Виключити відомості про конференції, які відбулися в минулому році. Якщо треба видалити дані з підпорядкованої таблиці, не виникає ніяких проблем. Якщо в батьківській таблиці видаляється запис, для якого є зв’язані записи в іншій таблиці, то можливі декілька варіантів. В схемі даних треба виділити лінію зв’язку між таблицями, в контекстному меню вибрати пункт Свойства, у вікні, що відкриється, вкладку Связи. Там автоматично встановлений прапорець Применить связь для INSERT и UPDATE. Тому, якщо є зв’язані записи, після запуску процедури буде виведене повідомлення про помилку і жодні записи видалені не будуть. Але якщо встановити прапорці: Применить связь для INSERT и UPDATE та каскадное удаление связанных полей то будуть видалені як записи з батьківської таблиці, так і зв’язані записи в підпорядкованій таблиці. Якщо зняти ці прапорці, то можна порушити цілісність даних – в підпорядкованій таблиці залишаться дані, а відповідні дані в головній таблиці будуть видалені. Аналогічно для змінення даних використовується прапорець каскадное обновление связанных полей Для розв’язку задачі відкриємо схему даних та встановимо всі три прапорці на зв’язок таблиці Conference з таблицею Section та зв’язок таблиці Section з таблицею Material. В конструкторі збереженої процедури добавимо таблицю Conference та запишемо SQL – код: DELETE FROM dbo.Conference WHERE (YEAR(Date_begin) = 2009) Будуть видалені дані з усіх трьох таблиць про конференції, що відбулися в 2009 році, про їхні секції та матеріали. Задача 5.9 Замінити код конференції з 1093 на код 1201. Таке завдання потребує змін в полі Conference_ID у двох таблицях: Conference та Section. Але завдяки встановленим прапорцям можна створити збережену процедуру тільки для однієї головної таблиці – Conference. В конструкторі збереженої процедури в меню Запрос виберемо пункт Обновление та запишемо SQL – код: UPDATE dbo.Conference SET Conference_ID = 1201 WHERE (Conference_ID = 1093) Старий код буде змінено на новий в обох таблицях. Задача 5.10 Конференції, які повинні відбутися в листопаді поточного року, перенести на грудень. Для розв’язку задачі треба перенести на 30 днів уперед всі дати для потрібних конференцій. Тобто треба збільшити значення полів Date_begin, Date_end та Date_art таблиці Conference. Це можна зробити в одній процедурі. Для критерію вкажемо рік та номер місяця – 11. SQL – код матиме вигляд: UPDATE dbo.Conference SET Date_begin = Date_begin + 30, Date_end = Date_end + 30, Date_art = Date_art + 30 WHERE (MONTH(Date_begin) = 11) AND (YEAR(Date_begin) = YEAR(GETDATE()) – 1) 5.3 Індивідуальні завданняСтворити подання або збережені процедури для свого варіанту. Варіант 1 1. Вивести перелік проданих товарів із зазначенням дати продажу, назви товару, проданої кількості. Підрахувати вартість кожної покупки. Упорядкувати список за датою. 2. Здійснити пошук інформації про товар за його назвою. Назву товару вводити як параметр. 3. Для кожного дня підрахувати вартість проданих товарів. 4. Збільшити вартість певної марки товару на 10%. Варіант 2 1. Вивести список квартир із зазначенням району, кількості кімнат, площі та контактного телефону. Упорядкувати список за районом та кількістю кімнат. 2. Здійснити пошук інформації про наявні квартири за кількістю кімнат. Кількість кімнат вводити як параметр. 3. Підрахувати кількість квартир в ріелтерській конторі для кожного району міста. 4. Записати до нової таблиці відомості про квартири, які були переглянути покупцями. Варіант 3 1. Вивести інформацію про поїздки: марка та держ. номер машини, прізвище водія, дата поїздки, кілометраж. Упорядкувати список за датою та маркою машин. 2. Здійснити пошук повної інформації про автомобіль за його держ. номером. Номер вводити як параметр. 3. Підрахувати загальні витрати пального для кожної машини щомісяця. 4. Записати до нової таблиці відомості про автомобілі, які були виготовлені в минулому або поточному році. Варіант 4 1. Вивести перелік замовлень на туристичні поїздки. Підрахувати вартість кожного замовлення. Упорядкувати список за назвою країни та датою. 2. Здійснити пошук повної інформації про тури до певної країни. Країну вводити як параметр. 3. Підрахувати найбільшу кількість путівок в одному замовленні для кожної країни. 4. Вилучити інформацію про тури з класом готелю * або **. Варіант 5 1. Вивести інформацію про результати останньої сесії із зазначенням прізвища студента. Упорядкувати список за номером групи та прізвищем. 2. Здійснити пошук повної інформації про студента за номером залікової книжки. Номер вводити як параметр. 3. Підрахувати кількість студентів в групах для кожної з форм навчання. 4. Записати до нової таблиці відомості про студентів, які отримують стипендію. Варіант 6 1. Вивести перелік дисциплін, які викладаються на кафедрі із зазначенням груп, викладачів та ін. Упорядкувати список за назвою предмету та номером групи. 2. Здійснити пошук повної інформації про дисципліни, які викладаються у певному семестрі. Семестр вводити як параметр. 3. Для кожного викладача підрахувати кількість предметів, які він викладає. 4. Для предметів з формою контролю Іспит збільшити кількість годин на 17. Варіант 7 1. Вивести повну інформацію про виконані замовлення. Упорядкувати список за назвою замовника та датою виходу реклами. 2. Здійснити пошук інформації про замовлення на певну дату. Дату вводити як параметр. 3. Для кожного замовника підрахувати середній обсяг реклами. 4. Збільшити на 5 % вартість всієї реклами. Варіант 8 1. Вивести інформацію про продані журнали. Упорядкувати список за назвою. 2. Здійснити пошук повної інформації про видання за його індексом. Індекс вводити як параметр. 3. Для кожного дня підрахувати загальну вартість проданих примірників. 4. Створити нову таблицю з інформацією про видання, які виходять 1 раз на місяць. Варіант 9 1. Вивести повну інформацію про лікарів та їхніх пацієнтів. Упорядкувати список за назвою відділення. 2. Вивести повну інформацію про пацієнтів певного відділення. Назву відділення вводити як параметр. 3. Для кожного лікаря підрахувати кількість його пацієнтів. 4. Вилучити дані про виписаних пацієнтів. Варіант 10 1. Вивести інформацію про всіх мешканців. Упорядкувати список за адресою (вулиця, номер будинку та квартири). 2. Здійснити пошук повної інформації про мешканців за прізвищем. Прізвище вводити як параметр. 3. Для кожного будинку підрахувати загальні сплачені суми за останній місяць. 4. Створити структуру архівної таблиці та доповнити її даними попереднього запиту. Варіант 11 1. Вивести інформацію про вже відремонтовані прилади. Упорядкувати список за датою прийому приладу на ремонт. 2. Здійснити пошук повної інформації про прилад за його назвою та маркою. Їх треба вводити як параметр. 3. Підрахувати кількість приладів, які ще мають гарантію. 4. Збільшити на 10%вартість ремонту для приладів, виготовлених 5 років тому або раніше. Варіант 12 1. Вивести інформацію про продані квитки. Упорядкувати список за датою номером поїзду та датою поїздки. 2. Здійснити пошук повної інформації про поїзди до певного міста. Назву міста вводити як параметр. 3. Підрахувати загальну кількість та вартість проданих квитків для кожної дати. 4. Вилучити дані про продані квитки на дати, що вже минули. 5.4 Контрольні питання
З повагою ІЦ "KURSOVIKS"! |