БАЗИ ДАНИХ. МОВИ ЗАПИТІВ, УПРАВЛІННЯ ТРАНЗАКЦІЯМИ,

РОЗПОДІЛЕНА ОБРОБКА ДАНИХ

 

1.2 Опис запитів мовою QBE

 

       1.2.1 Вибірка даних з умовою
            1.2.2 Використання результуючих функцій
            1.2.3 Обчислення в запитах
            1.2.4 Операції додавання, видалення і модифікації
 

Запит QBE являє собою одну або декілька таблиць, рядки яких містять вимоги до значень рядків таблиці, одержуваної в результаті виконання запиту.

Відповідно до синтаксису запиту назву таблиці (відношення) поміщають в заголовок першого стовпця (сам стовпець залишається порожнім завжди, крім випадку короткого запису включення до результату всіх стовпців таблиці). Для кожного атрибута, що бере участь у запиті, в таблицю включається свій стовпець, в заголовоку якого міститься ім'я атрибута. Так, шаблон запиту для таблиці STUDENT, атрибутами якої є ПІБ, Група та Курс студента, матиме такий вигляд:

 

STUDENT

ПІБ

Група

Курс

 

 

 

 

 

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

Для опису змінних в умовах відбору записів, а також для зв'язування шаблонів в запитах використовуються змінні – елементи прикладу. Елемент прикладу грає роль ідентифікатора змінної (як у мові програмування) і задається за допомогою символьно-цифрової послідовності. Довжина та склад елементу прикладу можуть бути довільними: головне, щоб при використанні у різних місцях шаблону він мав однаковий вигляд. Елелентом прикладу можуть виступати ідентифікатори example, x або n.

Константні значення, які й складають той самий «зразок» з терміна QBE беруться в лапки.

Для вказівки шуканих атрибутів значенню відповідного стовпця –  змінній, константному виразу або пустому значенню (коли необхідно включити стовпець у результат, але значення не використовується для зв'язку з іншими таблицями) – передує символ «Р» (що означає «надрукувати») з крапкою. Занесення «Р.» у всі стовпці шаблону можна замінити записом Р. в першому стовпці шаблону під ім'ям таблиці. Так, запит на вибірку інформації про всіх студентів матиме вигляд:

 

STUDENT

ПІБ

Група

Курс

Р.

 

 

 

 

Якщо потрібно вивести лише ПІБ студентів, то символ «Р.» необхідно записати лише в стовбець ПІБ:

 

STUDENT

ПІБ

Група

Курс

 

Р.

 

 

 

Для впорядкування виведених значень за зростанням або за спаданням, використовують конструкції «АТ.» і «DOвідповідно.  Якщо потрібно виконати упорядкування за кількома стовпцями , застосовують конструкції виду: «АТ (1)» ( для першого стовпця упорядкування ) , «АТ (2)» ( для другого стовпця упорядкування ) і так далі.

 

1.2.1 Вибірка даних з умовою

 

Вибір записів з умовою (з кваліфікатором) в загальному випадку може бути заснований на точному співпадінні, частковому співпадінні або порівнянні.

1. Точне співпадіння задається введенням констант у відповідних полях шаблону.

2.Часткове співпадіння задається за допомогою елементів прикладу. Зокрема, для формулювання запиту про виведення списку всіх студентів, прізвища яких починаються з літери «А» , а закінчуються на «ов», можна скористатися конструкцією Р.«А»name«ко», записаної в поле ПІБ таблиці  STUDENT, де name – змінна.

3. Умова порівняння записується за допомогою операцій порівняння: дорівнює (=), більше ( > ), менше    (<), більше або дорівнює ( > =) , менше або дорівнює ( <= ), що не дорівнює (!=), не більше (! > ), що не менше ( ! <).

 

Приклад 1.1. Запит на вибірку за точним співпадінням.

Вивести ПІБ всіх студентів 3-го курсу.

 

STUDENT

ПІБ

Група

Курс

 

Р.xx

 

«3»

 

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

 

Приклад 1.2. Запит на вибірку з частковим спів падінням.

Ввести список студентів, чиї прізвища починаються на літеру «А», а закінчуються на «ко».

 

STUDENT

ПІБ

Група

Курс

 

Р. «А»name«ко»

 

 

 

У наведенному прикладі «А» і «ко» є константами, а name – елементом прикладу. Використовуючи елементи прикладу, можна задавати різноманітні варіанти часткового співпадання із значеннями даних із таблиць. Оскільки елементу приклада відповідає будь-який символ, а також пустий (відсутність символа), то умові часткового співпадання х1«є»х2 відповідають слова, які мають символ “є” не тільки всередині, але й на початку та в кінці.

 

Приклад 1.3. Запит на вибірку з умовою порівняння і константою.

Вивести імена співробітників, які працюють у відділі «Іграшки» та отримують заробітну плату більше 4500 грн.

 

EMP

ПІБ

Зарплата

Керівник

Відділ

 

Р.

> 4500

 

«Іграшки»

 

У наведеному прикладі присутні дві умови, які об’єднуються логічною зв’язкою «І». Константою виступає назва відділу – «Іграшки».

 

Приклад 1.4.  Запит на вибірку з умовою порівняння та елементом прикладу.

Вивести список імен та заробітних плат усіх співробітників, чия заробітна плата більша, ніж в Іванова А.О.

Оскільки значення заробітної плати Іванова А.О. не відоме, запит можна перефразувати так: «Нехай Іванов А.О. отримує зарплату в розмірі zp. Знайти всіх співробітників, які отримують зарплату більше, ніж zp, та вивести їх зарплати».

 

EMP

ПІБ

Зарплата

 

Р.

Р.>zp

 

«Іванов А.О.»

zp

 

У даному прикладі реалізована вибірка з порівнянням елементу прикладу. Порядок рядків у шаблоні не важливий. Кожен такий рядок визначає вимоги до результату – рядків результуючої таблиці. Відповідно до цього, набір рядків таблиці запиту можна вважати набором предикатів, об'єднаних зв'язкою «І» в логічний вираз, які становлять критерій відповідності знайдених рядків даному запиту.

 

Приклад 1.5. Запит з об’єднанням умов.

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

 

EMP

ПІБ

Зарплата

Керівник

Відділ

 

Р.

Р.> zp

 

department

 

«Петров В.В.»

zp

 

 

 

SALES

Відділ

Товар

 

department

«олівець»

 

Для виконання такого запиту необхідно зв’язати дві таблиці EMP та SALES за допомогою елемента прикладу department.

 

Приклад 1.6. Запит з двома зв’язками в одному шаблоні.

Знайти імена всіх співробітників, які отримують більше, ніж їх керівники.

Цей запит за допомогою елементів прикладів можна сформулювати таким чином: «Знайти всіх співробітників, чиї керівники є head та отримують зарплату, більшу, ніж zp, де zp – зарплата head». Шаблон відповідного запиту має вигляд:

 

EMP

ПІБ

Зарплата

Керівник

Відділ

 

Р.

> zp

head

 

 

head

zp

 

 

 

Елемент head використовується для зв’язку керівника в першому рядку шаблону та імені в другому рядку, а елемент zp використовується для порівняння зарплат.

 

Приклад 1.7. Запит з операцією заперечення.

Вивести назви відділів, у яких не продаються товари, що виготовлені під брендом «Своя лінія».

 

SALES

Відділ

Товар

 

Р.

i

 

SYPPLY

Товар

Бренд

 

!i

«Своя лінія»

 

У випадках , коли умови відбору записів для вибірки є великими виразами, які незручно або важко задати в шаблоні, можна використовувати блок умов. Він ззовні нагадує порожній шаблон з одним полем і ім'ям CONDITIONS. Блок умов призначений для запису логічних виразів.

Логічні вирази можуть включати операції логічного множення AND та логічного додавання OR.

 

Приклад 1.8. Запит з блоком умов та операцією AND.

Вивести імена співробітників, чия заробітна плата складає від 3200 грн. до 7000 грн., але не дорівнює 5000 грн.

Традиційний шаблон запиту матиме такий вигляд:

 

 EMP

ПІБ

Зарплата

 

Р.Ivan

>=3200

 

Ivan

<=7000

 

Ivan

!5000

 

Використовуючи блок умов з явним заданням AND (&), цей запит можна сформулювати так:

 

EMP

ПІБ

Зарплата

 

Р.

zp

 

CONDITIONS

zp=(>=3200 & <=7000 & !5000)

 

Приклад 1.9. Запит з блоком умов та операцією OR.

Вивести імена співробітників, чия заробітна плата складає 3200 грн., 5000 грн. або 6400 грн.

Традиційний шаблон запиту матиме такий вигляд:

 

 EMP

ПІБ

Зарплата

 

Р.Ivan

3200

 

Р.Igor

5000

 

Р.Oleg

6400

 

В кожному рядку шаблону використовуються різноманітні елементи прикладів і тому ці умови діють незалежно. Використовуючи блок умов з явним заданням операції OR (|), цей запит можна сформулювати так:

 

EMP

ПІБ

Зарплата

 

Р.

zp

 

CONDITIONS

zp=(3200|5000|6400)

 

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).

 

Student

ПІБ

Група

 

ALL.Студент

Р.GB

 

Conditions

CNT.ALL.Студент>20

 

Приклад 1.11. Використання функцій зі зв’язуванням таблиць.

Вивести назви відділів, в яких продаються тільки товари зеленого кольору.

 

SALES

Відділ

Товар

 

Р.GB

ALL.item

 

TYPE

Товар

Колір

 

ALL. item

   «зелений»

 

1.2.3 Обчислення в запитах

За допомогою запитів можна вибирати дані з таблиць і проводити обчислення. Вид обчислень задається за допомогою виразу в шаблоні. У виразах, окрім звичних арифметичних операцій (+, -, *, /) та дужок, можуть використовуватися вбудовані функції: AVG., CNT., MAX., MIN. І SUM.

 

Приклад 1.12. Запит з обчисленням з арифметичними операціями.

Нехай є таблиця EMP1 з полями ПІБ, Зарплата та Премія. Необхідно по кожному із співробітників вивести ім’я та загальну суму зарплати та премії.

Для цього сформуємо шаблон нової таблиці OUTPUT (заповнивши в ній стрічку з ім’ям таблиці та іменами ї полів) та вкажемо в ній вид обчислень. Зв’яжемо цей шаблон з шаблоном запиту до таблиці EMP1.

 

OUTPUT

ПІБ

СУМА

 

Р.Employee

P.(zp+pr)

 

EMP1

ПІБ

Зарплата

Премія

 

Employee

zp

рr

 

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

 

Приклади 1.13. Запит з обчисленням з результуючими функціями.

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

 

EMP

ПІБ

Відділ

 

P.CNT.ALL.Employee

 

 

Елемент прикладу Employee можна опустити.

Якщо потрібно підрахувати кількість співробітників у відділі іграшок, то необхідно підготувати шаблон запиту виду:

 

EMP

ПІБ

Відділ

 

P.CNT.ALL.Employee

«Іграшки»

 

Якщо потрібно підрахувати кількість співробітників у кожному відділі, то підготуємо шаблон запиту виду:

 

EMP

ПІБ

Відділ

 

P.CNT.ALL.Employee

P.department

 

В шаблоні запиту була застосована операція групування.

 

1.2.4 Операції додавання, видалення і модифікації мови QBE

 

На відміну від розглянутих операцій, операції додавання, видалення та модифікації призводять до зміни вихідної таблиці. Вид операції (вставка – І., видалення – D., модифікація – U.) записується в шаблоні під ім'ям таблиці, а константи і умовні вирази вказуються за тими ж правилами, що в операціях вибірки.

Приклади 1.14. Операції додавання, видалення та модифікації.

Для додавання в таблицю EMP нового співробітника відділу «Іграшки» з прізвищем Антонюк О.П., заробітною платою 3200 грн. і керівником Мацько А.Д. необхідно сформувати такий шаблон:

 

EMP

ПІБ

Зарплата

Керівник

Відділ

І.

Антонюк О.П.

3200

Мацько А.Д.

Іграшки

 

Для того, щоб видалити всю інформацію про співробітників відділу «Іграшки», сформуємо такий шаблон:

 

EMP

ПІБ

Зарплата

Керівник

Відділ

D.

 

 

 

«Іграшки»

 

У випадку зміни заробітної плати співробітника Мацька А.Д. шаблон запиту матиме вигляд:

 

EMP

ПІБ

Зарплата

Керівник

Відділ

U.

«Мацько А.Д.»

6400

 

 

 

Порожнє поле означає, що воно не підлягає зміні. Якщо потрібно змінити деяке значення на «порожнє», використовується ключове слово NULL.

Щоб підвищити зарплату співробітникам відділу «Іграшки» на 10%, можна сформувати шаблон запиту на модифікацію такого виду:

 

EMP

ПІБ

Зарплата

Керівник

Відділ

U.

 

1,1*zp

 

 

 

 

zp

 

«Іграшки»

 

Реалізація цього запиту відбувається в два етапи: спочатку вибираються всі записи зі значенням «іграшки» в полі Відділ, а потім відбувається зміна поля Зарплата відібраних записів на нове значення.

 

 

попередня     ЗМІСТ    наступна

 

 

Пєтух А.М., Романюк О.В., Романюк О.Н.

ВНТУ 2016