Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OBDZ metod.doc
Скачиваний:
8
Добавлен:
11.11.2018
Размер:
1.02 Mб
Скачать

Лабораторна робота № 4

Тема: «Запити на об’єднання та зєднання таблиць. Групові запити та агрегатні функції».

Мета : Навчити студентів створювати запити на вибірку з декількох таблиць, створювати групові запити з використанням агрегатних функцій.

Зміст роботи: створити запити мовою sql з використанням inner join, left join, ritgh join, union, з використанням group by, having, агрегатних функцій sum, min, max, avg, count

Форма звіту:

  1. створені запити

  2. протокол лабораторної роботи

Теоретичні відомості

Часто в запитах необхідно одержувати дані з декількох таблиць. Для цього використовуються внутрішнє і зовнішнє з'єднання таблиць.

При внутрішньому з'єднанні двох таблиць А і В логічний порядок формування результуючого набору даних можна представити собі таким чином.

  1. Із стовпців, які вказані після слова SELECT, складається проміжний набір даних шляхом зчеплення результуючих стовпців кожного запису з таблиці А і результуючих стовпців запису з таблиці В.

  2. З набору даних, що вийшов відкидаються всі записи, що не задовольняють умові пошуку в команді WHERE.

Умова пошуку визначається в команді WHERE і при порівнянні значення стовпця однієї таблиці із значенням стовпця іншої таблиці має наступний вигляд

< ім'я стовпця таблиці1> <оператор> < ім'я стовпця таблиці2 >

Нехай є 2 таблиці - А і В.

Таблиця А

Стовпець Р1

Стовпець Р2

Стовпець Р3

a

x

400

b

x

200

c

y

500

d

Таблиця В

Стовпець Р1

Стовпець Р2

x

1

y

2

z

2


Тоді виконання оператора

SELECT А.Р1, А.Р2, В.Р2

from А, В

Where А.Р2 = В.Р1

приведе до слідуючого результату

Стовпець А.Р1

Стовпець А.Р2

Стовпець В.Р2

a

x

1

b

x

1

c

y

2


Внутрішнє з'єднання таблиць, реалізоване за допомогою логічних умов в команді WHERE, можна реалізувати і за допомогою команди INNER JOIN.

SELECT А.Р1, А.Р2, В.Р2

from А INNER JOIN В ON А.Р2 = В.Р1

Існує також і інший вид з'єднання таблиць - зовнішнє з'єднання. Воно визначається в команді FROM згідно такої специфікації:

SELECT {* | <значення1> [ < значення2> ...]}

FROM <таблиця1> <вид з'єднання> JOIN <таблиця2>

ON <умова пошуку>

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

- LEFT (ліве зовнішнє з'єднання), коли ведучою є таблиця1 (розташована зліва від виду з'єднання);

- RIGHT (праве зовнішнє з'єднання), коли ведучою є таблиця2 (розташована праворуч від виду з'єднання);

- FULL (повне зовнішнє з'єднання), коли провідними таблицями є і таблиця1, і таблиця2.

Виконання оператора

SELECT А.Р1, А.Р2, В.Р2

from А LEFT JOIN В ON А.Р2 = В.Р1

реалізовуючого зовнішнє ліве з'єднання, приведе до створення такого результуючого набору даних:

Стовпець А.Р1

Стовпець А.Р2

Стовпець В.Р2

a

х

1

b

х

1

с

у

2

d

Виконання оператора

SELECT А.Р1, А.Р2, В.Р2

from А RIGHT JOIN В ON А.Р2 = В.Р1

реалізовуючого зовнішнє праве з'єднання, приведе до створення такого результуючого набору даних:

Стовпець А.Р1

Стовпець А.Р2

Стовпець В.Р2

a

х

1

b

х

1

с

у

2

2

Виконання оператора

SELECT А.Р1, А.Р2, В.Р1, В.Р2

from А FULL JOIN В ON А.Р2 = В.Р1

реалізовуючого повне з'єднання, приведе до створення такого результуючого набору даних:

Стовпець А.Р1

Стовпець А.Р2

Стовпець В.Р1

Стовпець В.Р2

a

х

х

1

b

х

х

1

с

у

у

2

d

z

2

Іноді буває корисним об'єднувати два або більш результуючих набори даних, що повертаються в результаті виконання операторів SELECT. Таке об'єднання проводиться за допомогою оператора UNION. Результуючі набори повинні мати однакову структуру, тобто однаковий склад стовпців, що повертаються.

Прикладом використовування цього оператора може служити наступний запит:

select *

from lease

Where pokup = "Іванов"

UNION

select *

from lease

Where KOL_VO = 1000

Застосування агрегатних функцій в інструкції SELECT

Агрегатна функція Опис

AVG Повертає середнє значення окремого поля

COUNT Повертає кількість записів в таблиці

SUM Повертає суму значень окремого поля

MAX Повертає найбільше значення в специфікованому полі

MIN Повертає найменше значення в специфікованому полі

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

Якщо до застосування агрегатної функції необхідно виключити значення, що дублюються, слідує перед ім'ям стовпця у визначенні функції помістити ключове слово DISTINCT. Ключове слово DISTINCT не має сенсу для функцій MAX і MIN. Проте його використання може надавати ефект на результати виконання функцій SUM і AVG, тому слід наперед обдумати, чи повинне воно бути присутнім у кожному конкретному випадку, Крім того, ключове слово DISTINCT в кожному запиті може бути вказано не більше одного разу.

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

Пропозиція GROUP BY

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

Пропозиція HAVING

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

Пропозиція HAVING є необов'язковою.

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

Пропозиція HAVING може містити до 40 виразів, зв'язаних логічними операторами, такими як And і Or.

Слід відмітити, що умови в HAVING і в Where мають такі відмінності:

  1. HAVING виключає з результуючого набору даних групи з результатами агрегованих значень;

  2. Where виключає з розрахунку агрегатних значень по угрупуваннях записи, не задовольняючі умові;

  3. в умові пошуку Where не можна указувати агрегатні функції.

Контрольні питання

  1. Які існують варіанти з’єднання таблиць?

  2. Якими операторами виконується внутрішнє з’єднання таблиць?

  3. Що таке зовнішнє з’єднання?

  4. Чим відрізняються оператори RIGHT JOIN, FULL JOIN, LEFT JOIN ?

  5. Коли використовується оператор UNION?

  6. Що таке груповий запит?

  7. Що таке агрегатні функциї?

  8. Чим відрізняється функція COUNT від функції SUM?

  9. Коли слід використовувати HAVING?

  10. Чим відрізняються умови в HAVING і в Where?

Варианти завдань

Вариант 1

  1. Отримати індекс, назву видання, вартість номеру та періодичність видань видавництва «Наука»

  2. Отримати квітанції передплатника Харченко.

  3. Підрахувати кількість передплатників.

  4. Підрахувати кількість видань кожного видавництва.

  5. Знайти максимальну вартість номеру видання.

  6. Підрахувати кількість передплатників, яки пiдписали бiльше двох видань.

Вариант 2

Отримати назви тканин чорного кольору з указанням ціни за 1 м та виробника.

Знайти витрату матеріалу на чоловічий костюм 48 розміру.

Знайти загальну кількість замовлених чоловічих костюмів 48 розміру.

Знайти максимальну ціну за 1 м тканини виробника «Чернівчанка».

  1. Отримати назви виробів, на які витрачається більше 3 м тканини.

6. Отримати замовлення заданого замовника з указанням назви виробу, розміру і кількості.

Вариант 3

  1. Обчислити кількість гравців в кожній команді.

  2. Отримати список гравців команд міста Одеси.

  3. Отримати список персоналу команди «Чорноморець» з указанням посад.

  4. Обчислити середній вік гравців заданої команди.

  5. Отримати список стадіонів заданого міста.

  6. Обчислити кількість персоналу для кожної команди.

Вариант 4

  1. Обчисліть кількість виробів для кожного майстра.

  2. Обчислити середній вік майстрів.

  3. Для кожної кваліфікації підрахувати кількість майстрів.

  4. Для кожного виду промислу обчислити кількість майстрів, які виготовляють вироби цього виду промислу.

  5. Отримати дату народження наймолодшого майстра.

  6. Скільки майстрів мають однакову дату народження

Вариант 5

  1. Обчислити кількість викладачів на кожній посаді.

  2. Обчислити кількість викладачів на кожній кафедрі.

  3. Обчислити кількість місць в аудіторіях.

  4. Отримати список предметів, які викладає кафедра програмування.

  5. Отримати список аудіторій не зайнятих у вівторок на першій парі.

  6. Отримати розклад занять заданого викладача.

Вариант 6

  1. Які вироби виготовляє «Світоч»?

  2. Для кожної форми власності обчислити кількість виробників.

  3. Отримати список виробів фірми «Одеса_Люкс» з указанням виду виробів.

  4. Яка максимальна ціна за одиницю продукції фірми «Одеса_Люкс»?

  5. Отримати список виробів, які випускає фірма «Одеса_Люкс».

  6. Знайти кількість виробників.

Вариант 7

  1. Знайти кількість видавництв.

  2. Отримати список книг заданого автора.

  3. Для кожної країни знайти кількість авторів.

  4. Для кожного видавництва знайти кількість екземплярів виданих книг в 2007 році.

  5. Які жанри мають книги Пушкіна?

  6. Скільки випущено екземплярів книги з кодом 2.

Вариант 8

  1. Отримати накладні заданого споживача.

  2. Яка максимальна ціна за одиницю товара?

  3. Отримати сумарну кількість товара в кожній накладнії.

  4. У скількох споживачів не вказан телефон?

  5. Скільки накладних було видано в січні 2008 року?

  6. Обчислити вартись товару в накладній № 12.

Вариант 9

  1. Отримати список замовлень заданого замовника.

  2. Отримати кількість не оплачених замовлень.

  3. Яка мінімальна вартість перевезення?

  4. Отримати замовлення, які виконував Петров у січні 2008 року.

  5. Скільки замовлень було в 2007 році?

  6. Знайти середню вартість перевезення

Вариант 10

  1. Отримати список об’єктів заданого типу.

  2. Скільки витрачається цеглі на будинок №5 по вулиці Теністій?

  3. Отримати кількість об’єктів кожного типу.

  4. Яка вартість матеріалів на будинок №5 по вулиці Теністій?

  5. Отримати список матеріалів, які не витрачаються на об’єкт з кодом 5.

  6. Для кожного об’єкту отримати список витрачаємих матеріалів.

Вариант 11

  1. Отримати список книг заданого автора.

  2. Отримати максимальну вартість книги.

  3. Обчислити кількість замовників, у яких не вказан телефон.

  4. Вказати тираж для кожної книги.

  5. Для кожного замовника обчислити кількість замовлених книг.

  6. Отримати назви країн, з яких немає авторів.

Вариант 12

  1. Отримати список співробітників, займаючих посаду «Викладач».

  2. Обчислити кількість співробітників у відділі №2.

  3. Обчислити кількість співробітників в кожному відділі.

  4. Яка максимально можлива кількість співробітників на підприємстві?

  5. Назвати № відділів, в яких маються вакансії.

  6. Який максимальний оклад на підприємстві?

Вариант 13

  1. Отримати список тренерів заданого виду спорту.

  2. Отримати список спортсменів, які тренуються у Петрова.

  3. Обчислити кількість спортсменів в товаристві.

  4. Скільки спортсменів тренує Петров?

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

  6. Для яких видів спорту в товаристві немає тренера?

Вариант 14

  1. Отримати список авто заданої фірми.

  2. Яка мінімальна ціна на авто?

  3. Отримати рахунок заданого клієнта.

  4. Скільки авто червоного кольору є в автосалоні?

  5. Скільки рахунків було видано в січні 2008 року?

  6. Узнати середню ціну не авто.

Вариант 15

  1. Обчислити кількість співробітників.

  2. Отримати список рослин, замовлених Івановим.

  3. Коли співробітник Петров заключав договори?

  4. Отримати дату народження наймолодшого співробітника.

  5. Які рослини були замовлені для озеленення площі більше 100 кв.м?

  6. Які кімнатні рослини були замовлені в січні 2008 року?

Вариант 16

  1. Отримати список учасників з Росії.

  2. Обчислити кількість учасників з кожної країни.

  3. Коли доповідає Іванов Петро?

  4. Отримати список учасників, які доповідають українською.

  5. На яких мовах були доповіді?

  6. Скільки доповідей було на конференції?

Вариант 17

  1. Отримати список товарів заданого виробника.

  2. Отримати список товарів, які не виробляє «ООО ТЕМП».

  3. Обчислити вартість покупки з рахунком №1.

  4. Скільки клієнтів користуються послугами магазину?

  5. Які товари купував Іванов Сергій?

  6. Отримати мінімальну ціну на відеопрогравач.

Вариант 18

  1. Отримати діагнози з карточки Попова Олексія з указанням дати.

  2. Отримати список лікарів терапевтичного відділення.

  3. Скільки лікарів працює в кожному відділенні?

  4. Отримати кількість чоловіків старше 60 років.

  5. В якому відділенні працює більше 5 лікарів?

  6. Які лікарі відвідували хворих 10.01.08?

Вариант 19

  1. Отримати список викладачів заданої кафедри.

  2. Отримати назви кафедр, на яких працює більше 15 викладачів.

  3. Скільки видань має викладач Семенов?

  4. Скільки видань має кожен викладач?

  5. Скільки видань видано в 2007 році?

  6. Отримати кількість викладачів пенсійного віку.

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