БАЗИ ДАНИХ. МОВИ ЗАПИТІВ, УПРАВЛІННЯ ТРАНЗАКЦІЯМИ, РОЗПОДІЛЕНА ОБРОБКА ДАНИХ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.2 Опис запитів мовою QBE
1.2.1 Вибірка даних з умовою Запит QBE являє собою одну або декілька таблиць, рядки яких містять вимоги до значень рядків таблиці, одержуваної в результаті виконання запиту. Відповідно до синтаксису запиту назву таблиці (відношення) поміщають в заголовок першого стовпця (сам стовпець залишається порожнім завжди, крім випадку короткого запису включення до результату всіх стовпців таблиці). Для кожного атрибута, що бере участь у запиті, в таблицю включається свій стовпець, в заголовоку якого міститься ім'я атрибута. Так, шаблон запиту для таблиці STUDENT, атрибутами якої є ПІБ, Група та Курс студента, матиме такий вигляд:
Значення атрибутів (зразок, змінна або результат запиту) поміщаються у відповідні стовпці. Для опису змінних в умовах відбору записів, а також для зв'язування шаблонів в запитах використовуються змінні – елементи прикладу. Елемент прикладу грає роль ідентифікатора змінної (як у мові програмування) і задається за допомогою символьно-цифрової послідовності. Довжина та склад елементу прикладу можуть бути довільними: головне, щоб при використанні у різних місцях шаблону він мав однаковий вигляд. Елелентом прикладу можуть виступати ідентифікатори example, x або n. Константні значення, які й складають той самий «зразок» з терміна QBE беруться в лапки. Для вказівки шуканих атрибутів значенню відповідного стовпця – змінній, константному виразу або пустому значенню (коли необхідно включити стовпець у результат, але значення не використовується для зв'язку з іншими таблицями) – передує символ «Р» (що означає «надрукувати») з крапкою. Занесення «Р.» у всі стовпці шаблону можна замінити записом Р. в першому стовпці шаблону під ім'ям таблиці. Так, запит на вибірку інформації про всіх студентів матиме вигляд:
Якщо потрібно вивести лише ПІБ студентів, то символ «Р.» необхідно записати лише в стовбець ПІБ:
Для впорядкування виведених значень за зростанням або за спаданням, використовують конструкції «АТ.» і «DO.» відповідно. Якщо потрібно виконати упорядкування за кількома стовпцями , застосовують конструкції виду: «АТ (1)» ( для першого стовпця упорядкування ) , «АТ (2)» ( для другого стовпця упорядкування ) і так далі.
Вибір записів з умовою (з кваліфікатором) в загальному випадку може бути заснований на точному співпадінні, частковому співпадінні або порівнянні. 1. Точне співпадіння задається введенням констант у відповідних полях шаблону. 2.Часткове співпадіння задається за допомогою елементів прикладу. Зокрема, для формулювання запиту про виведення списку всіх студентів, прізвища яких починаються з літери «А» , а закінчуються на «ов», можна скористатися конструкцією Р.«А»name«ко», записаної в поле ПІБ таблиці STUDENT, де name – змінна. 3. Умова порівняння записується за допомогою операцій порівняння: дорівнює (=), більше ( > ), менше (<), більше або дорівнює ( > =) , менше або дорівнює ( <= ), що не дорівнює (!=), не більше (! > ), що не менше ( ! <).
Приклад 1.1. Запит на вибірку за точним співпадінням. Вивести ПІБ всіх студентів 3-го курсу.
У наведеному шаблоні елемент прикладу замість Р.xx можна вказати просто Р., оскільки елементи прикладу обов'язково вказуються тільки при записі логічних умов, а також при зв'язуванні таблиць в запитах.
Приклад 1.2. Запит на вибірку з частковим спів падінням. Ввести список студентів, чиї прізвища починаються на літеру «А», а закінчуються на «ко».
У наведенному прикладі «А» і «ко» є константами, а name – елементом прикладу. Використовуючи елементи прикладу, можна задавати різноманітні варіанти часткового співпадання із значеннями даних із таблиць. Оскільки елементу приклада відповідає будь-який символ, а також пустий (відсутність символа), то умові часткового співпадання х1«є»х2 відповідають слова, які мають символ “є” не тільки всередині, але й на початку та в кінці.
Приклад 1.3. Запит на вибірку з умовою порівняння і константою. Вивести імена співробітників, які працюють у відділі «Іграшки» та отримують заробітну плату більше 4500 грн.
У наведеному прикладі присутні дві умови, які об’єднуються логічною зв’язкою «І». Константою виступає назва відділу – «Іграшки».
Приклад 1.4. Запит на вибірку з умовою порівняння та елементом прикладу. Вивести список імен та заробітних плат усіх співробітників, чия заробітна плата більша, ніж в Іванова А.О. Оскільки значення заробітної плати Іванова А.О. не відоме, запит можна перефразувати так: «Нехай Іванов А.О. отримує зарплату в розмірі zp. Знайти всіх співробітників, які отримують зарплату більше, ніж zp, та вивести їх зарплати».
У даному прикладі реалізована вибірка з порівнянням елементу прикладу. Порядок рядків у шаблоні не важливий. Кожен такий рядок визначає вимоги до результату – рядків результуючої таблиці. Відповідно до цього, набір рядків таблиці запиту можна вважати набором предикатів, об'єднаних зв'язкою «І» в логічний вираз, які становлять критерій відповідності знайдених рядків даному запиту.
Приклад 1.5. Запит з об’єднанням умов. Знайти імена і зарплати співробітників, які отримують більше ніж Петров В.В. і працюють у відділі, де продаються олівці.
Для виконання такого запиту необхідно зв’язати дві таблиці EMP та SALES за допомогою елемента прикладу department.
Приклад 1.6. Запит з двома зв’язками в одному шаблоні. Знайти імена всіх співробітників, які отримують більше, ніж їх керівники. Цей запит за допомогою елементів прикладів можна сформулювати таким чином: «Знайти всіх співробітників, чиї керівники є head та отримують зарплату, більшу, ніж zp, де zp – зарплата head». Шаблон відповідного запиту має вигляд:
Елемент head використовується для зв’язку керівника в першому рядку шаблону та імені в другому рядку, а елемент zp використовується для порівняння зарплат.
Приклад 1.7. Запит з операцією заперечення. Вивести назви відділів, у яких не продаються товари, що виготовлені під брендом «Своя лінія».
У випадках , коли умови відбору записів для вибірки є великими виразами, які незручно або важко задати в шаблоні, можна використовувати блок умов. Він ззовні нагадує порожній шаблон з одним полем і ім'ям CONDITIONS. Блок умов призначений для запису логічних виразів. Логічні вирази можуть включати операції логічного множення AND та логічного додавання OR.
Приклад 1.8. Запит з блоком умов та операцією AND. Вивести імена співробітників, чия заробітна плата складає від 3200 грн. до 7000 грн., але не дорівнює 5000 грн. Традиційний шаблон запиту матиме такий вигляд:
Використовуючи блок умов з явним заданням AND (&), цей запит можна сформулювати так:
Приклад 1.9. Запит з блоком умов та операцією OR. Вивести імена співробітників, чия заробітна плата складає 3200 грн., 5000 грн. або 6400 грн. Традиційний шаблон запиту матиме такий вигляд:
В кожному рядку шаблону використовуються різноманітні елементи прикладів і тому ці умови діють незалежно. Використовуючи блок умов з явним заданням операції OR (|), цей запит можна сформулювати так:
1.2.2 Використання результуючих функцій При запису логічних виразів на мові QBE можуть застосовуватись результуючі функції: CNT. (лічильники кількості), SUM. (сума), AVG. (середнє), MIN. (мінімум), МАХ. (максимум), UN. (унікальний) та ALL. (всі значення, в тому числі й ті, що повторюються). Перші п'ять із них є статистичними, а останні дві визначають характер вибірки: включати чи не включати у вибірку повторювані значення. Функцію UN. Можна приєднати до функцій CNT., SUM., и AVG. Так, запис CNT.UN. означає кількість значень, які відрізняються. А запис CNT.ALL навпаки буде означати кількість всіх значень.
Приклад 1.10. Використання функцій з блоком умов. Необхідно вивести назви груп, в яких навчається більше 20 студентів. Цей запит можна розділити на три операції: згрупувати студентів за групами, підрахувати число студентів у кожній з груп і відібрати групи, в яких працює більше 20 студентів. Обчислення в групах виконуються за допомогою конструкції GB (Group-by).
Приклад 1.11. Використання функцій зі зв’язуванням таблиць. Вивести назви відділів, в яких продаються тільки товари зеленого кольору.
За допомогою запитів можна вибирати дані з таблиць і проводити обчислення. Вид обчислень задається за допомогою виразу в шаблоні. У виразах, окрім звичних арифметичних операцій (+, -, *, /) та дужок, можуть використовуватися вбудовані функції: AVG., CNT., MAX., MIN. І SUM.
Приклад 1.12. Запит з обчисленням з арифметичними операціями. Нехай є таблиця EMP1 з полями ПІБ, Зарплата та Премія. Необхідно по кожному із співробітників вивести ім’я та загальну суму зарплати та премії. Для цього сформуємо шаблон нової таблиці OUTPUT (заповнивши в ній стрічку з ім’ям таблиці та іменами ї полів) та вкажемо в ній вид обчислень. Зв’яжемо цей шаблон з шаблоном запиту до таблиці EMP1.
Оскільки операція додавання виконується по кожній стрічці вихідної таблиці, такий тип обчислень називають горизонтальним. Вбудовані функції оперують групами записів, тому можна вважати, що вони виконують вертикальні обчислення.
Приклади 1.13. Запит з обчисленням з результуючими функціями. Для підрахунку загальної кількості співробітників необхідно скласти такий запит:
Елемент прикладу Employee можна опустити. Якщо потрібно підрахувати кількість співробітників у відділі іграшок, то необхідно підготувати шаблон запиту виду:
Якщо потрібно підрахувати кількість співробітників у кожному відділі, то підготуємо шаблон запиту виду:
В шаблоні запиту була застосована операція групування.
1.2.4 Операції додавання, видалення і модифікації мови QBE
На відміну від розглянутих операцій, операції додавання, видалення та модифікації призводять до зміни вихідної таблиці. Вид операції (вставка – І., видалення – D., модифікація – U.) записується в шаблоні під ім'ям таблиці, а константи і умовні вирази вказуються за тими ж правилами, що в операціях вибірки. Приклади 1.14. Операції додавання, видалення та модифікації. Для додавання в таблицю EMP нового співробітника відділу «Іграшки» з прізвищем Антонюк О.П., заробітною платою 3200 грн. і керівником Мацько А.Д. необхідно сформувати такий шаблон:
Для того, щоб видалити всю інформацію про співробітників відділу «Іграшки», сформуємо такий шаблон:
У випадку зміни заробітної плати співробітника Мацька А.Д. шаблон запиту матиме вигляд:
Порожнє поле означає, що воно не підлягає зміні. Якщо потрібно змінити деяке значення на «порожнє», використовується ключове слово NULL. Щоб підвищити зарплату співробітникам відділу «Іграшки» на 10%, можна сформувати шаблон запиту на модифікацію такого виду:
Реалізація цього запиту відбувається в два етапи: спочатку вибираються всі записи зі значенням «іграшки» в полі Відділ, а потім відбувається зміна поля Зарплата відібраних записів на нове значення.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Пєтух А.М., Романюк О.В., Романюк О.Н. ВНТУ 2016 |