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

Правила виконання sql–запиту на вибірку (з врахуванням секції group by)

1. Сформувати декартовий добуток таблиць, вказаних в секції FROM.

Якщо в секції FROM вказана лише одна таблиця, то декартовим добутком буде вона сама.

2. Якщо є секція WHERE - застосувати умову секції WHERE до кожного рядка таблиці, утвореної в результаті декартового добутку і залишити тільки ті рядки, для яких ця умова виконується, тобто має значення TRUE; рядки, для яких умова має значення FALSE або NULL – відкидаються.

3. Якщо секція GROUP BY, - розділити рядки, що залишилися в результ. таблиці, на групи таким чином, щоб рядки в кожній групі мали одинакові значення по всіх стовпчиках групування. Стовпчик групування – це той стовпчик, який визначає групу рядків. В межах групи всі рядки мають в стовпчику групування одне і те саме значення.

Таблиця

......

стовпчик

групування

......

значення 1

значення 1

..................

значення 1

значення N

..................

значення N

4. Для кожного рядка, що залишився (або для кожної групи рядків) – обчислити значення кожного елемента із списку полів секції SELECT і утворити один рядок таблиці результату запиту. При будь-якому звертанні до стовпчика береться значення стовпчика для біжучого рядка (або групи рядків).

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

5. Якщо є ключове слово DISTINCT – вилучити із таблиці результатів запиту всі рядки – дублікати.

6. Якщо є секція ORDER BY – відсортувати результати запиту.

Кілька стовпчиків групування

SQL дозволяє групувати результати запиту на основі двох чи більшої кількості стовпчиків.

Наприклад, потрібно згрупувати замовлення по працівникам та клієнтам.

Нехай

Zamovlennia

Pracivnyk

Klient

Kilkist

.....

...........

.............

.............

...........

Тоді, запит:

21). Обчислити загальну кількість замовлень по кожному клієнту для кожного працівника:

21). SELECT Pracivnyk,

Klient,

SUM (Kilkist)

FROM Zamovlennia

GROUP BY Pracivnyk,

Klient

Навіть при групуванні по двом стовпчикам SQL забезпечує лише один рівень групування.

Запит 21) генерує лише один підсумковий рядок для кожної пари працівник – клієнт.

За допомогою SQL неможливо створити групи і підгрупи з двома ( чи більшою кількістю) рівнями підсумкових результатів.

Найкраще, що можна зробити – це відсортувати дані таким чином, щоб рядки в таблиці результатів запиту розміщувалися в потрібному порядку.

В багатьох СУБД при використанні GROUP BY сортування виконується автоматично, але автоматичний порядок сортування можна поміняти за допомогою секції ORDER BY:

22). Підрахувати загальну кількість замовлень по кожному клієнту для кожного працівника, відсортувати результати запиту по клієнтам і працівникам:

22). SELECT Klient,

Pracivnyk,

SUM (Kilkist)

FROM Zamovlennia

GROUP BY Klient,

Pracivnyk

ORDER BY Klient,

Pracivnyk

За допомогою одного SQL – запиту неможливо отримати як детальні, так і проміжні підсумкові результати.

Для того, щоб отримати детальні результати з підсумками по групам – необхідно написати програму, яка обчислює ці проміжні підсумкові результати (це може робити Quick Report)

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