Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МНД_Мет_Лаб_Сервер.doc
Скачиваний:
3
Добавлен:
20.11.2019
Размер:
1.62 Mб
Скачать

Завдання 4. Вирішити функціональну задачу на основі складного запиту.

Припустимо, що поставлена задача з’ясувати, службовцям якого відділу до-ручено працювати з клієнтом Telеcoм. Визначити шлях пошуку цієї інформації.

Порядок виконання завдання 4.

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

Із таблиці завдань можна отримати ідентифікаційні номери службовців (employeelD), а по таблиці службовців можна з’ясувати номери відділів, в яких ці службовці працюють. З цією інформацією можна звернутися до таблиці відділів і знайти назву відповідного відділу.

Така послідовність дій, пов’язана з обробкою даних чотирьох таблиць, являє собою шлях пошуку необхідної інформації. Реалізувати такий запит можна командою:

select department.name

from client, assignment, employee, department

where client.name='Telеcoм'

and client.clientID = assignment.clientID

and assignment.employeelD = employee.employeelD

and employee.departmentID = department.departmentID;

Логіка виконання завдання передбачає: спочатку слід створити всі необхідні таблиці, а потім встановити умови об’єднання, котрі зв’яжуть ці таблиці між собою. В такому запиті використовується одна звичайна умова – client.name='Telеcom' – і три умови об’єднання. Для об’єднання n таблиць використовується (п 1) умова об’єднання. Схема об’єднання таблиць для даного прикладу приведена на рис. 11.

Рис. 11 – Схема об’єднання чотирьох таблиць з трьома умовами злиття

Завдання 5. Вивчити формат команд угруповування даних

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

Порядок виконання завдання 5:

Приклад 1. Визначити кількість книг кожного видавництва в базі даних publications командою:

SELECT publishers.publisher, COUNT(titles.title) FROM titles INNER JOIN publishers ON titles.pub_id=publishers.pub_id GROUP BY publisher;

Ключове слово HAVING діє у такий спосіб: спочатку пропозиція GROUP BY розбиває рядки на групи, потім на отримані набори рядків накладаються умови HAVING.

Приклад 2. Усунути з попереднього запиту видавництва, що мають тільки одну книгу:

SELECT publishers.publisher, COUNT(titles.title) FROM titles INNER

JOIN publishers ON titles.pub_id=publishers.pub_id GROUP BY publisher HAVING COUNT(titles.title)>1;

Приклад 3. Включити в результат використання HAVING тільки ті видавництва, назва яких закінчується на підрядок "Press":

SELECT publishers.publisher, COUNT(titles.title) FROM titles INNER JOIN publishers ON titles.pub_id=publishers.pub_id GROUP

BY publisher HAVING publisher LIKE '*Press';

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]