Операції та агрегатні функції.
При створенні запитів на мові SQL використовуються реляційні та булеві оператції, спеціальні операції умов, а також агрегатні функції.
Реляційні операції
Реляційні операції – це математичні символи, які вказують на певний тип порівняння двох значень. SQL використовує наступні операції:
= | рівне; |
> | більше ніж; |
< | менше ніж; |
>= | більше або рівне; |
<= | менше або рівне; |
<> | не дорівнює. |
Ці операції мають стандартні значення для числових значень. Для символьних значень їх визначення залежить від синтаксису перетворення ASCII або EBCDIC.
Булеві операції
Основні булеві операції (NOT , AND, OR) Булеві вирази набувають значення істина або хибність згідно таблиці:
a | b | a AND b | a OR b |
TRUE | TRUE | TRUE | TRUE |
TRUE | FALSE | FALSE | TRUE |
TRUE | NULL | NULL | TRUE |
FALSE | FALSE | FALSE | FALSE |
FALSE | NULL | FALSE | NULL |
NULL | NULL | NULL | NULL |
a | NOT a |
TRUE | FALSE |
FALSE | TRUE |
NULL | NULL |
Мова SQL дозволяє використовувати також спеціальні операції, а саме:
IN – визначає набір значень, в який дане значення може бути включене або ні (A IN (1, 2, 3, 4, 5); B IN (‘X’, ‘Y’, ‘Z’));
BETWEEN – визначає діапазон значень, куди дане значення може входити (A BETWEEN 1 AND 5; B BETWEEN ‘X’ AND ‘Z’). Тут числа ’1’ і ’5’та символи ’X’ і ’Z’ входять у діапазон;
LIKE – використовується тільки для даних символьних типів, де у значеннях шукає входження рядка; при використанні символ (_) він заміняє будь-який один символ, а символ (%) заміняє послідовність будь-яких символів. Наприклад вираз
|
|
Text LIKE ‘S_’
дасть значення істина, якщо значення текстового поля Text починається з літери S, а другий символ довільний.
Text LIKE ‘S%’
дасть значення істина, якщо значення поля Text починається з літери S,а решту – будь які символи;
IS NULL – вказує на невизначене значення.
Агрегатні функції
Агрегатні функції видають конкретне значення для всієї вибірки.
Такими функціями є:
COUNT – видає кількість вибраних значень;
SUM – видає арифметичну суму вибраних значень;
AVG – видає середнє значення вибраних значень;
MAX – видає найбільше значення серед вибраних значень;
MIN – видає найменше значення серед вибраних значень.
Мова SQL - вибірка даних
Вибірка даних здійснюється за допомогою основного та найбільш функціонального оператора:
Оператор SELECT
Оператор SELECT – дозволяє проводити вибірки даних з однієї чи декількох таблиць і перетворювати до потрібного вигляду отримані результати які, як правило, представляються у вигляді таблиці.
Синтаксис оператора:
SELECT
[ ALL | DISTINCT ] * |
<ім’я таблиці>.* |
[ <ім’я таблиці>.]<назва поля> [AS <псевдонім>] [, …] |
<вираз> [AS <псевдонім>] [, …]
[ FROM
<ім’я таблиці> [, …] ]
[WHERE …]
[GROUP BY …]
[HAVING …]
[ORDER BY …] ;
|
|
ALL | DISTINCT – предикати, які використовуються для обмеження числа записів, що повертаються. За замовчуванням використовується ALL (повертає усі значення), якщо предикати відсутні. DISTINCT – виключає записи, що містять значення, які повторюються у всіх вибраних полях. Впливає на результат тоді, коли у запиті аналізуються не всі поля з таблиці. Символ «*» означає, що вибрані всі поля заданої таблиці або таблиць. Параметр <ім’я таблиці> – назва таблиці, з якої потрібно вибрати записи, <назва поля> – назва поля, з якого вибирають дані; якщо ж задано декілька полів, то дані вибираються у визначеному порядку, AS – задає нову назву заголовка стовпця у запиті, <псевдонім> – назва, що буде заголовком стовпця замість початкового.
Даний оператор не змінює дані у БД, де відбувається вибір. У найпростішому випадку дію оператора SELECT можна сформулювати так: вибрати <елемент> із <джерела>.
Фраза FROM
Фраза FROM міститься у операторі SELECT і є обов’язковою у випадку вибірки даних хоча б з однієї чи кількох таблиць. Дана фраза може бути опущена у вибірках результатів із деяких виразів чи функцій, наприклад SELECT 2+3;
|
|
Порядок таблиць у виразі не важливий — більшість сучасних СУБД проводять попередній аналіз та планування оптимізації виконання запиту.
Синтаксис:
FROM <ім’я таблиці> [, …];
Тут <ім’я таблиці> – назва таблиці, з якої потрібно вибрати записи.
Приклади.
Розглянемо таблицю Students (табл.1), яка складається з п’яти полів і п’яти записів: Num містить ідентифікаційні номери студентів; Surname - прізвища студентів; Name - імена студентів; Age - вік студентів; Speciality – спеціальність, на якій студент навчається.
Таблиця 1
Num | Surname | Name | Age | Speciality |
1 | Крупик | Віктор | 19 | Інформатика |
2 | Прапій | Степан | 19 | Інформатика |
3 | Працків | Оксана | 18 | Інформатика |
4 | Селань | Віктор | 20 | Математика |
5 | Ятрів | Олег | 17 | Інформатика |
6 | Петрів | Назар | 20 |
Дана таблиця буде використовуватись при розгляді решти прикладів.
Приклад 1.
Вивести всі значення таблиці Students.
Запит матиме вигляд:
SELECT * FROM Students;
Результат – табл. 2
Таблиця 2
Num | Surname | Name | Age | Speciality |
1 | Крупик | Віктор | 19 | Інформатика |
2 | Прапій | Степан | 19 | Інформатика |
3 | Працків | Оксана | 18 | Інформатика |
4 | Селань | Віктор | 20 | Математика |
5 | Ятрів | Олег | 17 | Інформатика |
6 | Петрів | Назар | 20 |
|
|
Приклад 2.
Інший варіант реалізації прикладу 1.
SELECT
Num, Surname, Name, Age, Speciality
FROM
Students;
Даний запит також виводить усі значення таблиці Students (табл.1).
Результат – табл. 2
Приклад 3.
Вивести тільки значення поля Age (вік студентів), з новою назвою заголовка стовпця s_age.
Запит матиме вигляд:
SELECT
Age AS s_age
FROM
Students;
Результат – табл. 3
Таблиця 3
s_age |
19 |
19 |
18 |
20 |
17 |
20 |
Для отримання переліку даних без повторень, використовують оператор DISTINCT.
Приклад 4.
Вивести якого віку є студенти у таблиці Students .
Запит матиме вигляд:
SELECT DISTINCT
Age
FROM
Students;
Результатом дії будуть унікальні дані (табл. 5).
Таблиця 5
Age |
17 |
18 |
19 |
20 |
В команді SELECT можуть міститись не тільки імена стовпців таблиці чи таблиць, але і обчислювальні вирази.
Приклад 5.
Вивести прізвища студентіві їх вік у місяцях вважаючи, що у таблиці вказаний повний рік (12 місяців).
Запит матиме вигляд:
SELECT
Surname, Age*12, ' місяців '
FROM
Students;
Фраза WHERE
Фраза WHERE є необов’язковою. Дана фраза визначає умову вибірки результуючих рядків. Якщо фраза WHERE не включена у запит, то результатом будуть усі результуючі рядки. Якщо в запиті використовуються декілька таблиць і фраза WHERE відсутня, то результатом буде скалярний добуток таблиць.
Синтаксис:
[WHERE <умова>]
де <умова> – умова або умови вибору значень із поля чи полів які включають операції відношення, логічні операції, функції тощо.
Приклад 6.
Вибрати прізвища студентів, яким є дев’ятнадцять років. Для цього використаємо фразу WHERE.
Запит матиме вигляд:
SELECT
Surname, Age
FROM
Students
WHERE
Age=19;
Результат – табл. 6
Таблиця 6
Surname | Age |
Крупик | 19 |
Прапій | 19 |
Приклад 7.
Вибрати студентів, що поступили на інформатику і яким менше 19 років.
Запит матиме вигляд:
SELECT
Surname, Age, Speciality
FROM
Students
WHERE
Speciality='Інформатика' AND Age<19;
Результат - табл. 7
Таблиця 7
Surname | Age | Speciality |
Працків | 18 | Інформатика |
Ятрів | 17 | Інформатика |
Приклад 8.
Вивести прізвища всіх студентів для яких не задана спеціальність.
Запит матиме вигляд:
SELECT
Surname, Age, Speciality
FROM
Students
WHERE
Speciality is null;
Результат – табл.8
Таблиця 8
Surname | Age | Speciality |
Ціпій | 20 |
Якщо потрібно вивести прізвища студентів із визначеними спеціальностями, то запит матиме вигляд:
SELECT
Surname, Age, Speciality
FROM
Students
WHERE
Speciality is not null;
Приклади використання функцій between і in у запитах.
Select * from Students where Age between 17 and 19;
Select * from Students where Age in (17,19);
Фраза GROUP BY
Фраза GROUP BY є необов’язковою. Використовується при формуванні підсумкових запитів і об’єднує записи з однаковими значеннями у вказаному списку полів в один запис. Дозволяє застосовувати агрегатні функції до кожної групи, яка визначається загальним значенням поля або полів, вказаних в цій фразі.
Синтаксис:
GROUP BY
Параметр <таблиця> можна не використовувати у тих випадках, коли користувач працює з однією таблицею.
Параметр <назва поля> – поле, по якому відбувається групування. Йому може передувати ім’я таблиці, якщо вибір виконується більше ніж з однієї таблиці.
Приклад 9.
Підрахувати кількість студентів на кожній із спеціальностей і вивести назву спеціальності і кількість студентів на ній. Для зручності скористаємось реченням GROUP BY.
Запит матиме вигляд:
SELECT
Speciality, COUNT(Speciality)
FROM
Students
GROUP BY
Speciality;
Тут функція Count повертає кількість записів у групі.
Результат - табл. 9
Таблиця 9
Speciality | COUNT ( Speciality) |
Інформатика | 4 |
Математика | 1 |
Фраза HAVING
Фраза HAVING є необов’язковою. Після того, як записи будуть згруповані за допомогою GROUP BY, фраза HAVING відбере ті значення з отриманих записів, що задовольнять умовам вибірки, які вказані у HAVING .
Синтаксис:
[HAVING <умова>]
Параметр <умова> – умова або умови відбору значень із отриманих записів.
Приклад 10.
Видати назви спеціальностей на які поступило більше трьох людей та точну їх кількість. Для цього у GROUP BY застосуємо HAVING .
Запит матиме вигляд:
SELECT
Speciality, COUNT(Speciality)
FROM
Students
GROUP BY
Speciality
HAVING
COUNT(Speciality)>3;
Результат - табл. 10
Таблиця 10
Speciality | COUNT (Speciality) |
Інформатика | 4 |
Фраза ORDER BY
Фраза ORDER BY є необов’язковою. Дана фраза сортує результуючі записи, що отримані після виконання запиту за зростанням або спаданням указаних полів чи поля. Його необхідно вказувати для сортування результату запиту. За замовчуванням задано порядок сортування за зростанням.
Синтаксис:
[ ORDER BY
{ <назва поля> [ ASC | DESC ] } [,…]]
<назва поля> – поле, за яким відбувається сортування. ASC (DESC) – зареєстровані слова для розташування елементів у зростаючому (спадному) порядку.
Приклад 11.
Вивести на екран всю інформацію про студентів, яка відсортована у спаданні за віком студентів, а потім у зростанні за їх прізвищами.
Запит матиме вигляд:
SELECT *
FROM
Students
ORDER BY
Age DESC, Surname ASC;
Результат – табл. 11
Таблиця 11
Num | Surname | Name | Age | Speciality |
6 | Петрів | Назар | 20 | |
4 | Селань | Віктор | 20 | Математика |
1 | Крупик | Віктор | 19 | Інформатика |
2 | Прапій | Степан | 19 | Інформатика |
3 | Працків | Оксана | 18 | Інформатика |
5 | Ятрів | Олег | 17 | Інформатика |
Дата добавления: 2022-01-22; просмотров: 20; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!