
- •Мова sql(Structured Query Language) – як універсальний засіб створення баз даних, маніпулювання данними та отримамання потрібної інформації.
- •Умова відбору (ключове слово where)
- •Зрівняння.
- •Ліве з’єднання (left join)
- •Сортування результату (фраза order by)
- •Групування результатів (фраза group by). Агрегатні функціії.
- •Використання фрази group by
- •Використання фрази having
- •Підзапити
- •Ключові слова exists I not exists
- •Модифікація даних (оператор update)
- •Видалення даних з бази(оператор delete).
- •Створенння таблиць (оператор create table).
- •Check (Naukov_stupin in(‘не має’, ‘кадидат’, ‘доктор’))
- •Використання транзакцій.
- •Управління доступом даних
- •Insert – право втавляти в таблицю нові рядки;
- •Надання привілеїв іншим користувачам (оператор grant)
- •Insert - користувач з цим привілеєм може виконувати оператор insert для цієї таблиці;
- •Відміна наданих привілеїв (оператор revoke)
Мова sql(Structured Query Language) – як універсальний засіб створення баз даних, маніпулювання данними та отримамання потрібної інформації.
SQL - це аббревіатура від Structured Query Language, що в перекладі з англійської означає мова структурованих запитів. Мова SQL орієнтована на реляційні бази даних, про які велась мова в попередніх лекціях. В ідеалі, люба мова для роботи з базами повинна надавати користувачеві такі можливості:
-
створюватибази даних і таблиці з повним описом їх структури;
-
виконувати основні операції маніпулювання даними (вставка, поновлення, видалення даних з таблиць);
-
виконувати прості і складні запити, що здійснюють перетворення необроблених даних в необхідну інформацію.
Крім того, мова роботи з базами даних повинна вирішувати всі вищезгадані при мінімальних зусиллях зі сторони користувача, а структура і синтаксис її команд повина бути простою і доступною для вивчення. Також мова повинна бути універсальною, тобто повинна відповідати загальновизнаному стандарту, що дозволить використовувати один і той же синтаксис і структуру команд при переході від однієї СУБД до іншої. Мова SQL задовольняє практично всім цим вимогам. Мова SQL має дві основні компоненти:
-
мова DDL (Data Definition Language), засобами якої визначаються структури бази;
-
мова DML (Data Manipulation Language), засобами якої здійснюється виборка і поновлення даних.
Мова SQL може використовуватись двома способами. Перший передбачає інтерактивний режим роботи, який полягає в тому, що користувач з терміналу вводить окремі SQL-оператори. Другиий метод полягає в тому, що SQL-оператори вбудовуються певним чином у процедурні мови програмування (C, C++ ). В основному ці 2 форми SQL працюють однаково. На практичних роботах ми будемо користуватись інтерактивною формою.
На сьогоднішній день для мови SQL існує міжнародний стандарт (ISO 1992р), який робить цю мову стандартною мовою визначення і маніпулювання реляційними базами даних.
Термінологія SQL. Стандарт ISO SQL не підтримує таких формальних термінів як “відношення”, “атрибут” і “кортеж”, замість них вживаються терміни “таблиця”, “стовпчик” і “рядок”. Ми будемо притримуваться термінології ISO.
Запис SQL-операторів. Мова SQL містить зарезервовані слова а також слова, які визначаються користувачем. Зарезервовані слова є постійною частиною самої мови SQL і мають фіксоване значення. Їх потрібно записувати так як це визначено мовою, їх не можна розбивати на частини для переносу з одного рядка в інший. Слова, що визначаються користувачем, задаються самим користувачем ( у відповідності з визначеними синтаксичними правилами) і є іменами різних об’єктів бази – таблиць, стовчиків, представлень, індексів, тощо.
Слова в операторі розташовуються у порядку визначеному синтаксичними правилами мови. Більшість компонентів SQL-оператора не чутливі до регістру. Це означає, що можна використовувати як малі так і великі букви. Наприклад, зарезервоване слово Select можна записати і так: SELECT – обидва записи еквівалентні. В подальшому ми будемо притримуватиись таких правил:
-
Великі букви використовуватимемо для написання зарезервованих слів мови SQL.
-
Малі букви латинського алфавіту будемо використовуватимемо для написання слів, які визначаються користувачем.
-
Вертикальна риска ( | ) вказує на необхідність вибору одного з декількох наведених значень – наприклад, a | b | c.
-
Фігурні дужки визначають обов’язковий елемент – наприклад, { a }.
-
Квадратні дужки визначають необов’язковий елемент – наприклад, [a].
-
Трикрапка ( … ) використовується для необовязкового повтору певної конструкції від 0 до декількох раз – наприклад, {a|b}[,c…]. Цей запис означає, що після a або b записується від нуля до декількох повторів с, відокремлених комами.
На практиці для визначення таблиць використовуються DDL-оператори, а для заповнення цих таблиць даними і виборки з них використовуються DML-оператори. Спочатку ми розглянемо DML-оператори, а потім DDL-оператори.
До DML-операторів мови SQL відносяться такі оператори:
-
SELECT – виборка даних з бази;
-
INSERT – вставка даних у таблицю;
-
UPDATE – поновлення (заміна) даних в таблиці;
-
DELETE – видалення даних з таблиці.
Числові константи SQL. Любе число є константою, наприклад, 200,3,0.9 – є числовими константами.
Символьні або текстові константи. Люба послідовність букв і цифр є символьною константою. Символьні константи поміщаються в одинарні кавички, наприклад, ‘Школа’,’5-та школа’,’200’. Зауважимо, що константи 200 і ‘200’ є різними в SQL. В мові SQL константи як числові так і нечиислові називають одним словом – літерал.
Приклад використання літералів в операторі INSERT:
INSERT INTO ustanova(kod,nazva) VALUES(10234,’Академія ДПС України’)
Цей оператор вставляє в таблицю ustanova новий рядок значення першої колонки стає 10234 (ця колонка має числовий формат), а другої колонки (вона має текстовий формат) – “Академія ДПС України”.
В мові SQL діють арифметичні операції – додавання, віднімання, множення і ділення. Ці операції позначаються:
-
+ - додавання (сума);
-
- - віднімання (різниця);
-
* - множення (добуток);
-
/ - ділення (частка).
Алгебричні вирази. Люба числова константа є алгебричним виразом. Люба назва стовпчика таблиці є алгебричним виразом. Алгебричні вирази називають сумісними по типу, якщо вони мають однаковий тип (символьний, числовий). Якщо A i B алгебричні вирази числового типу , то A+B, A-B, A*B, A/B - алгебричні вирази числового типу. Наприклад, 100/2, (column_name*0.2)/1.2, column_name1*column_name2+100. Якщо вирази А і B мають строковий тип, то A+B є строковим виразом. Наприклад, ‘Академія’+’ ДПСУ’, column_name3 + ’зараховано’, column_name3+ column_name4. У вище наведених прикладах column_name1, column_name2 означали назви стовпчиків числового типу, а column_name3, column_name3 – назви стовпчиків символьного типу.
В мові SQL можна використовувати такі оператори зрівнювання:
-
=
рівність
<
менше
>
більше
<=
менше або дорівнює
>=
більше або дорівнює
<>
не рівно
Якщо вирази A i B вирази одного типу, то вирази:
A = B, A < B, A > B, A <= B, A >= B, A <> B
називатимемо предикатами. Предикати приймають 2 значення: ІСТИНА і НЕІСТИНА. Наприклад, column_name1>1000, column_name3=‘Академія’.
Більш складні предикати будуються з допомогою булевих операцій AND, OR або NOT.
Якщо P1, P2 – предикати, то
P1 AND P2 , P1 OR P2 , NOT P1
також предикати.
Нижче в таблиці наведені результати застосування булевих операцій.
P1 |
P2 |
P1 AND P2 |
P1 OR P2 |
NOT P1 |
Істина |
Істина |
Істина |
Істина |
Неістина |
Істина |
Неістина |
Неістина |
Істина |
|
Неістина |
Істина |
Неістина |
Істина |
Істина |
Неістина |
Неістина |
Неістина |
Неістина |
|
Прості запити
Призначення оператора SELECT полягає в тому, щоб вибирати необхідні дані з однієї або декількох таблиць. Це виключно потужний оператор, який здатний виконувати дії, еквівалентні операторам реляційної алгебри selection, projection i join. Загальнний формат оператора SELECT має вид:
SELECT [DISTINCT | ALL] {* | column_expression [ AS new_name][,…]}
FROM table_name [alias][,…]
[WHERE condition]
[GROUP BY column_list] [HAVING condition]
[ORDER BY column_list]
Параметр column_expression – це і’мя стовпчика або виразу з декількох імен. Параметр table_name – це є і’мя існуючої в базі таблиці або представлення, до яких потрібно доступитись. Необов’язковий параметр alias – це скорочення для імені таблиці table_name. Обробка елементів оператора SELECT виконується в такій послідовності:
-
FROM - Визначаються імена таблиць, які використовуються
-
WHERE - Виконується фільтрація рядків згідно заданої умови відбору
-
GROUP BY - Утворюються групи рядків з однаковими значеннями в зазначених колонках
-
HAVING – Фільтруються групи рядків обєкту згідно вказаної умови
-
SELECT – Встановлюється, які стовпчики повині бути у вихідних даних
-
ORDER BY – Визначається порядок результату виконання оператора.
Порядок фраз в операторі SELECT не можна змінювати. Тільки дві фрази –SELECT і FROM є обов’язковими, всі інші можуть бути пропущеними. Результат запиту до таблиць є таблиця. Символ * в операторі SELECT означає, що будуть вибрані всі стовпчики таблиці.
Приклади. Нехай в таблиці table_a зберіігається інформація про покупки товарів, а в table_b – про продаж цих товарів. Ці таблиці мають таакий вид:
table_a table_b
kod |
suma |
data |
|
kod |
suma |
data |
1 |
100 |
1.1.2002 |
|
1 |
50 |
12.1.2002 |
2 |
150 |
2.1.2002 |
|
1 |
47 |
14.1.2002 |
1 |
55 |
10.1.2002 |
|
2 |
35 |
10.1.2002 |
1 |
40 |
15.1.2002 |
|
2 |
80 |
1.2.2002 |
2 |
89 |
2.2.2002 |
|
|
|
|
3 |
28 |
10.2.2002 |
|
|
|
|
В стовпчики “kod” в обох таблицях заноситься код товару. В стовпчик “suma” таблиці table_a заноситься вартість закупленого товару, а в таблиці table_b – сума проданого товару. В стовчик “data” таблиці table_a заноситься дата закупки товару, а в table_b – дата продажу товару.
Задача. Одержати перелік товарів з відповідними сумами і датами, які були закуплені. Відповідний оператор SELECT матиме вид:
SELECT kod,suma,data
FROM table_a
Оскільки не задана умова відбору фраза WHERE не потрібна. Результат запиту матиме вид:
kod |
suma |
data |
1 |
100 |
1.1.2002 |
2 |
150 |
2.1.2002 |
1 |
55 |
10.1.2002 |
1 |
40 |
15.1.2002 |
2 |
89 |
2.2.2002 |
3 |
28 |
10.2.2002 |
Точно такий же результат буде після виконання такого SELECT’у:
SELECT *
FROM table_a
Якщо потрібно відобразити лише код товару і відповідну суму, причому в першій колонці результату має бути сума а у другій - код, оператор SELECT матиме вид:
SELECT suma, kod
FROM table_a
Результат запиту матиме вид:
suma |
Kod |
100 |
1 |
150 |
2 |
55 |
1 |
40 |
1 |
89 |
2 |
28 |
3 |
(6 рядків)
Використання ключового слова DISTINCT. Задача. Потрібно скласти перелік кодів товарів які закуповувались. Якщо оператор SELECT задати таким чином:
SELECT kod
FROM table_a
Результат запиту матиме вид:
Kod |
1 |
2 |
1 |
1 |
2 |
3 |
(6 рядків)
Зверніть увагу на дубльовані рядки, поскільки, на відміну від операції реляційної алгебри projection, оператор SELECT не виключає дубльованих рядків. Для видалення з результуючої таблиці дубльованих рядків використовується ключове слово DISTINCT. Відредагований запит матиме вид:
SELECT DISTINCT kod
FROM table_a
Результат запиту матиме вид:
Kod |
1 |
2 |
3 |
(3 рядки)
При використанні ключового слова ALL оператор SELECT повертає всі рядки.
За змовчуванням (не вказано ні DISTINCT ні ALL), вважається, що діє ALL.
Обчислювальні поля. Задача. Одержати перелік товарів з відповідними сумами і відповідними сумами податку ПДВ, які закладені у вартість закуплених товарів. Відповідний оператор SELECT матиме вид:
SELECT kod,suma,(suma*0.2)/(1+0.2) AS pdv
FROM table_a
Результат запиту матиме вид:
kod |
suma |
Pdv |
1 |
100 |
16.666666 |
2 |
150 |
25 |
1 |
55 |
9.3333333 |
1 |
40 |
6.6666666 |
2 |
89 |
27.666666 |
3 |
28 |
4.6666666 |
(6 рядків)