ВГОРУ

SQL-Урок 6. Розрахункові (обчислювальні) поля

Для чого потрібно використовувати розрахункові поля? Як правило, інформація в БД представлена в розрізі окремих фрагментів, оскільки так легше структуризувати дані та оперувати ними. Проте нам часто буде потрібно використовувати не окремі частини даних, а вже поєднану та оброблену інформацію. Наприклад, часто необхідно поєднувати ім'я та прізвище клієнтів, поєднувати елементи адрес, які знаходяться в різних стовпцях таблиці, обробляти текст та окремі слова, букви та символи, підсумовувати загальну вартість покупки, відображати статистику по інформації, яка знаходиться в БД. Дані, зазвичай, зберігаються окремими "кусками", що вимагає їх додаткового опрацювання на стороні клієнтської програми. Проте є можливість отримувати вже оброблену інформацію за допомогою СУБД. Саме в цьому випадку допомагають розрахункові поля. Вони автоматично створюються при виконанні запиту і мають вигляд та властивості звичайних стовпців, які є вже наявні в таблиці. Єдина відммінність полягає в тому, що фізично розрахункових полів немає, тому вони не займають додаткового місця в БД, а тимчасово існують в "оперативній пам'яті" СУБД. Перевагою виконання операцій на стороні СУБД являється швидкість опрацювання даних.


1. Виконання математичних операцій

Одним із способів використання розрахункових полів є виконання математичних операцій над вибраними даними. Давайте на прикладі розглянемо як це відбувається, використавши знову нашу таблицю Sumproduct. Припустимо, на потрібно вирахувати середню ціну придбання кожного товару. Для цього потрібно переділити колонку Amount (сума) на Quantity (кількість):

Run SQLSELECT DISTINCT Product, Amount/Quantity 
FROM Sumproduct

Як бачимо, СУБД відібрала всі найменування товарів та відобразила їх середню вартість в окремому стовпці, який був створений під час виконання запиту. Також можна помітити, що ми використали додатковий оператор DISTINCT, який нам потрібен для відображення унікальних назв товарів (без нього ми б отримали дублювання записів).

2. Використання псевдонімів

В попередньому прикладі ми розраховували середню вартісь покупки кожного товару та відобразили значення в розрахунковому стовпці. Проте надалі, нам буде незручно звертатися до цього поля, оскільки його назва є неінформативною для нас (СУБД дала назву полю - Expr1001). Проте ми можемо назвати поле самостійно, наперед вказавши його назву в запиті, тобто дати псевдонім. Давайте перепишемо попередній приклад та вкажемо псевдонім для розрахункового поля:

Run SQLSELECT DISTINCT Product, Amount/Quantity AS AvgPrice 
FROM Sumproduct

Бачимо, наше розрахункове поле отримало власну назву AvgPrice. Для цього ми використали оператор AS, після якого вказали необхідну нам назву. Bарто зазначити, що в SQL підтримуються лише основні математичні операції: додавання (+), віднімання (-), множення (*), ділення (/). Також для зміни черговості виконання операції можна використовувати круглі дужки.

Часто псевдоніми використовують не тільки щоби називати розрахункові поля, але і для перейменування діючих. Це може бути необхідним, якщо діюче поле має довгу назву або назва не є достатньо інформативною.

3. З'єднання полів (конкатенація)

Крім математичних операцій ми також можемо поєднувати текст та виводити його в окремому полі. Давайте розглянемо, яким чином можна здійснити склеювання (конкатенацію) тексту. Для з'єднання тексту з різних колонок в MS Access використовується оператор "плюс" (+), наприклад:

Run SQLSELECT Month + ' ' + Product AS NewField, Quantity  
FROM Sumproduct

В цьому прикладі ми з'єднали значення в двох стовпцях та вивели результат в нове поле NewField.

Оператор "плюс" (+) не підтримується в діалекті MySQL для з'єднання (конкатенації) тексту з кількох колонок. В такому випадку використовуйте функцію CONCAT().