Лекція 6 Мова запитів за зразком Запит являє собою спеціальним чином описану вимогу, яка визначає склад операцій, що проводяться над БД операцій по вибору, видаленню та модифікації збережених даних.Для підготовки запитів за допомогою різноманітних СУБД частіше за все використовуються 2 мови опису запитів.
Головна відмінність між ними полягає в засобах формування запитів: мова QBE полягає в засобах формування запитів: мова QBE припускає ручне або візуальне формування запиту. Характеристика мови QBE Мова QBE дозволяє задавати складні запити до БД, шляхом заповнення пропонуємої СУБД запросної форми. Такий спосіб задання запитів забезмечує наочність та не потребує вказівки алгоритму виконання операції – досить описати зразок очікуваного результату. На мові QBE можна задавати запити однотабличні та багатотабличні (які вибирають або обробляють дані з декількох зв’язаних таблиць. За допомогою запитів на мові QBE можна виконувати наступні основні операції:
Результатом виконання запита є нова таблиця, що називається відповідною (від слова “відповідь” – перші 2 операції ), або поновлена вихідна таблиця (інші операції). Вибір, вставка, видалення та модифікація можуть провадитися безумовно або у відповідність з умовами, що задаються за допомогою логічних виразів. Обчислення над даними задаються за допомогою арифметичних виразів і породжують у відповідних таблицях нові поля, що називаються обчислюваними. Запитна форма має вигляд таблиці, ім’я та назва полів якої, співпадає з іменем та назвами полів відповідної вихідної таблиці. Щоб взнати імена доступних таблиць БД, в мові QBE передбачений запит на вибірку імен таблиць. Назви таблиць вихідної таблиці можуть вводитись в шаблон вручну або автоматично. Для прикладу візьмемо таблиці БД, яка відноситься до торгової сфери та використовується в фірмі, що продає товари кількох видів. База даних включає в себе 4 насткпні таблиці: Для опису змінних в умовах відбору записів, а також для зв’язування шаблонів в записах використовується елементи прикладу. Елемент прикладу грає роль ідентифікатора змінноі (як в мові програмування) та задаєтьсяза допомогою симовольно-цифрової послідовності. Елементи прикладу в шаблонах виділятимемо підкреслюванням. Вигляд (довжина та склад) елементу прикладу ролі не грають: головне, щоб при використанні в декількох місцях шаблона він був однаковий. Таким чином, як елементи прикладу, зокрема, можна використовувати ідентифікатори example, x або y. Для вказівки системі на необхідність включення у відповідну таблицю того чи іншого поля використовується “Р.”, що означає “надрукувати”. Приклад 1. Запит на вибірку. Враховуючи сказане, запит на вибірку всіх зелених товарів можна записати в такому вигляді:
Словесно запит можна сформулювати таким чином: “Вивести товари ХХ , колір яких зелений”. Пусті колонки можна видаляти із запису.
Приклад 2. Видалення колонок. У нас не використовуваним стовпчиком є ВАРТІСТЬ. Виходячи з цього, для наведеного шаблону можна записати такий еквівалентний шаблон
Після заповнення шаблону для отримання результату нажимаємо відповідну клавишу, наприклад, <Enter> та починаємо виконання запиту. Результатом виконання вищенаведеного запиту буде таблиця.
Приклад 3. Проста вибірка. Прикладом простої вибірки є запит: “ Вивести всі можливі кольори товарів з таблиці TYPE”. Заповнений шаблон матиме вигляд:
Таблиця відповіді має один стовпчик КОЛІР, в якому містяться значенн: білий, червоний, пусто (значення не задане), зелений,синій. Дублююмі значення при цьому пропадають. Якщо потрібно вивести дані з кількох полів вихідної таблиці, в кожному з відповідних стовпчиків шаблону записуємо “Р.”. Занесення “Р.” у всі стовпчики шаблона можна замінити записом ”Р” в першому стовпчику шаблона під іменем таблиці. Проста вибірка з упорядкуванням. Дляупорядкування вибраних значень по зростанню та спаданню використовуються конструкції “АО.” Та “ DO.” відповідно. Якщо потрібно виконати по декількох стовпчиках, застосовуються конструкції “АО(1).”, “АО(2).”Вибірка з кваліфікаторами (умовами). Вибір записів з вихідної таблиці в загальному випадку може бути оснований на: точному співпаданні, частковому співпаданні, порівнянні.
Приклад 4. Часткове співпадання
Шаблон запиту з вибором товарів синього кольору, всередині назви яких є буква “р”, виглядає таким чином,
Результат в цьому випадку буде таким:
Приклад 5. Умови порівнянняЗапит імен співробітників, що працюють у відділі іграшок та отримують зарплату більше 360, виглядає таким чином
Результатом запиту є таблиця вигляду:
Приклад 6. Порівняння з елементами прикладу Створимо шаблон запиту вибору імен та зарплат співробітників, які отримують більше ніж Левін П.Г. Інакше запит можна сформулювати так: “Нехай Левін П.Г. отримує зарплату в кількості s. Знайти всіх співробітників, які отримують зарплату більше, ніж s, та вивести їх зарплати. Порядок рядків в шаблоні значення не має.
Співробітників,що отримують зарплату більшу, ніж Левін П.Г. в таблиці EMP не виявилось. В таких випадках результуюча таблиця виявляється порожньою.
Умови в запиті можуть задаватись по одному або декільком стовпчиках.
Приклад 7. Об’єднання умов
Для формулювання запиту вибірки імен та зарплат службовців, що отримують більше, ніж Левін П.Г. та працюють у відділі іграшок, достатньо в попередню запитну форму в перший рядок стовпчика ВІДДІЛ вставити слово “іграшки”. Запит виду: “Знайти імена та зарплати службовців, які отримують зарплату більшу, ніж Бєлкін Б.Н., та працюють у відділі, що продає ручки”, виглядає таким чином:
Результатом виконання цього запиту буде таблиця вигляду:
Тут елемент прикладу department зв’язує дві вихідні таблиці по полю ВІДДІЛ, а елемент прикладу s використовується для зв’язування умов вибору в рамках однієї вихідної таблиці EMP.
Приклад 8. Запит в шаблоні якого 2 зв’язки
Нехай потрібно знайти всіх службовців, які отримують зарплату більшу, ніж їх керівники. Цей запит за допомогою елементів прикладів можна сформулювати таким чином: “ знайти всіх службовців, чиї керівники є head та отримують зарплату, більшу, ніж s, де s зарплата head “ Шаблон відповідного запиту має вигляд:
Елемент head використовується для зв’язку керівника в першому рядку шаблону та імені в другому рядку, а елемент s використовується для порівняння зарплат. В цьому прикладі результуюча таблиця виявиться такою:
В якості умови вибору записів із таблиць можна використовувати операцію заперечення.
Приклад 9. Відбір з операцією заперечення
Нехай необхідно вивести всі відділи, що продають товари, які не постачаються компанією Pencraft. Цей запит можна перефразувати: “Вивести назви відділів, що продають товари t, такі, що компанія Pencraft не постачає товари t.
Відповідна таблиця для сформульованого запиту має вигляд:
У випадках, коли умови відбору записів для вибірки є великими виразами, які незручно або важко задавати в запросі, можна використовувати блок умов. За виглядом він нагадує один шаблон з пустим полем та іменем CONDITIONS. Блок умов призначений для запису логічних виразів. Записані в одному шаблоні логічні вирази, в загальному випадку можуть включати в себе операції логічного множення (AND) та логічного додавання (OR).Приклад 10. Використання блоку умов. Шаблон запиту виводу прізвищ співробітників, чия зарплата складає від 400 до 500, але не дорівнює 460, матиме вигляд:
Використовуючи блок умов з явним заданням операції AND (&), цей запит можна сформулюват так:
Шаблон запиту виводу прізвищ співробітників, чия зарплата 400, 460 або 520, можна сформулювати так:
В кожному рядку шаблону використовуються різноманітні елементи прикладів і тому ці умови діють незалежно. За допомогою блока умов, в яких операція OR (символ | ) задана явно, цей же запит буде виглядати більш наглядно.
При запису логічних виразів на QBE можуть застосовуватись вбудовані функції , такі як: CNT.( лічильник або кількість), SUM. (сума), AVG. (середнє), MIN. (мінімум), MAX.(максимум), UN. (унікальний) та ALL (всі значення, втому числі ті, що повторюються ). Перші 5 є статистичними, а 2 останні визначають чи включати у вибір ці значення.Приклад 11. Використання функцій Нехай потрібно вивести назви відділів, в яких працює більше 2 співробітників. Цей запит можна розділити на 3 операції: згрупувати співробітників по відділах, підрахувати число співробітників в кожному відділі та відібрати відділи, в яких працює більше 2 співробітників.
Конструкція Toy означаэ операцію групування, функція ALL.Employee формує множину всіх імен по кожному з відділів. Запис CNT.ALL. Employee >2 забезпечує перевірку логічної умови. Тут зустрілася нова операція – формування групи (яка записується жирним шрифтом елементу прикладу). Результуюча таблиця матиме вигляд:
Інший приклад. Вивести назви відділів, в яких продаються тільки товари зеленого кольору.
Таблиця відповіді для цього запиту буде порожньою.
|