Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Відбір даних із таблиць засобами SQL.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
86.53 Кб
Скачать

Агрегирование данных. Sql-функции

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

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

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

Приклад запиту з групуванням записів:

select data_nar, count (data_nar)

from stat

where data_nar between ‘01.01.1960’ and ‘15.01.1980’

group by data_nar

Для кожної дати із вказаного періоду виводиться кількість записів, де вона зустрічається. Якщо не виконати групування, то в набір даних попадуть всі записи, а при групуванні всі записи отриманого набору даних унікальні. Функція COUNT виводить для кожної групи (сформованої по полю дати) кількість записів у групі.

Виконавши запит

select cod, sum (suma)

from obsag

group by cod

можна вивести загальну суму операцій, виконаних кожним рекламним агентом.

Максимальну суму операції кожного рекламного агента можна вибрати з допомогою запиту:

select cod, max (suma)

from obsag

group by cod

Сортування записів

Сортування - це впорядкування записів за зростанням або спаданням значень полів. Список полів, за якими здійснюється сортування, вказується в операнді ORDER BY. Порядок полів в цьому операнді визначає порядок сортування: спочатку записи впорядковуються за значенням поля, вказаного в цьому списку першим, потім записи, які мають однакові записи першого поля, впорядковуються за значенням другого поля і т.д.

Поля в списку позначаються іменами або номерами, відповідними до номерів полів у списку після слова SELECT. По замовчуванню сортування здійснюється в порядку зростання значень полів. Для протилежного напряму сортування необхідно вказати після імені поля описувач DESC.

Приклад запиту на сортування записів:

select *

from stat

order by prizv

Тут сортування записів задано за полем prizv.

Приклад запиту на сортування за двома полями:

select prizv, stag

from stat

order by prizv, stag desc

або

select prizv, stag

from stat

order by 1, 2 desc

У створений набір даних входять поля prizv, stag всіх записів. Записи посортовані за полями prizv, stag, при цьому значення поля stag впорядковано в порядку спадання.

Ще одна перевага мови SQL – це простота об’єднання даних, які містяться в декількох таблицях. Для цього після слова FROM перераховуються імена таблиць, із записів яких формується набір даних:

SELECT *

FROM <ім’я таблиці_1>, < ім’я таблиці_2>

або

SELECT <ім’я таблиці_1.*>, <ім’я таблиці_2.*>

FROM <ім’я таблиці_1>, <ім’я таблиці_2>

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

Відбір конкретних полів із двох таблиць виконується оператором:

SELECT <ім’я таблиці_1.ім’я поля>, <ім’я таблиці_2.ім’я поля>

FROM <ім’я таблиці_1>, <ім’я таблиці_2>

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

SELECT <ім’я поля>, <ім’я поля>

FROM <ім’я таблиці_1>, <ім’я таблиці_2>

Звязування таблиць

У набір даних можна включати поля з різних таблиць. Таке включення називається зв’язуванням таблиць. Зв’язування таблиць може бути внутрішнім і зовнішнім.

Внутрішнє зв’язування таблиць - це найпростіший випадок, коли після слова SELECT перелічуються поля різних таблиць.

Таблиці stat і obsag містять основні і додаткові дані про рекламних агентів. Таблиці зв’язані відношенням „один до одного”, тобто кожному запису першої таблиці відповідає один запис іншої таблиці. Результатний набір даних є об’єднанням полів двох таблиць таким чином, що ніби додаткові дані з’єднуються з основними. У таблицях можуть бути вибрані не всі поля, але це не міняє принципу з’єднання.

При використанні внутрішнього з’єднання таблиць з відношенням „один до одного” результат виконання запиту може містити надлишкову інформацію. Для того, щоб в результатному наборі даних отримати повну інформацію про здійснені операції, необхідно скористатися запитом з внутрішнім з’єднанням таблиць, зв’язаних відношенням „один до багатьох”. Наприклад,

select *

from stat, obsag

where stat.cod = obsag.cod

У результаті запиту виведуться всі поля і записи таблиці obsag і всі поля таблиці stat.

select stat.cod, stat.prizv, obsag.suma

from stat, obsag

where stat.cod = obsag.cod

У результаті запиту виведуться всі записи полів cod i prizv таблиці stat, а також поля suma таблиці obsag.

select *

from stat, obsag

where stat.cod = obsag.cod

order by stat.cod

У результаті запиту виведуться всі поля і записи таблиці obsag і всі поля таблиці stat, причому записи будуть посортовані по полю cod.