
- •Мова 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)
Ключові слова exists I not exists
Ключові слова EXISTS i NOT EXIST використовуються лише з підзапитами. Результатом їх виконання є логічне значення “ІСТИНА” або “ХИБНЕ”. Для ключовогослова EXISTS результат дорівнює “ІСТИНА” в тому і лише в тому випадку, коли результуюча таблиця підзапиту містить хоча б один рядок. Якщо результуюча таблиця підзапиту пуста, результат обробки ключового слова EXISTS буде рівним “ХИБНЕ”. Для кючового слова NOT EXISTS використовуються правила обробки, протилежні по відношенню до ключового слова EXISTS. Поскільки по ключсовим словам перевіряється лише наявність рядків результуючої таблиці, ця таблиця може містити довільне число як рядків так і стовпчиків. Приклад використання ключового слова NOT EXISTS наведено вище
SELECT *
FROM Vidomist a
WHERE NOT EXISTS
(SELECT *
FROM Osoba
WHERE a.kod=b.kod)
Наведений запит поверне ті рядки з таблиці Vidomist, які не відповідають жодному рядку з таблиці Osoba, тобто є такими, що порушують цілісність посилань. Отже, якщо цей запит поверне пусту таблицю, цілісність посилань не порушена.
Комбінування результуючих таблиць
(операції UNION, INTERSECT і EXCEPT)
В мові SQL можна використовувати звичні операції над множинами – об’єднання (UNION), перетин (INTERSECT) і різницю (difference), які дозволяють комбінувати результати виконання двох або більше запитів в єдину результуючу таблицю. На таблиці, до яких застосовують теоретико-множинні операції, накладаються певні обмеження. А саме:
-
таблиці повинні мати однакову кількість стовпчиків;
-
типи i-го стовпчика обох таблиць мають бути однаковими;
-
значення відповідних стовчиків обох табллиць належать одному й тому ж домену.
Наведемо приклад використання операції UNION. Потрібно сформувати відомість нарахованої зарплати за лютий місяць 2002 року з обовязковим включенням до списку всіх працівників незалежно від того нараховували їм зарплату чи ні. Відповідний запит матиме вид:
SELECT a.priz AS Прізвище, b.D AS [Нарахована сума]
FROM Osoba a, Vidomist b
WHERE a.kod=b.kod AND b.year=2002 AND b.mounth=2
UNION
SELECT priz,NULL
FROM Osoba
WHERE NOT kod IN(SELECT kod
FROM Osoba a, Vidomist b
WHERE a.kod=b.kod AND b.year=2002 AND b.mounth=2)
Перший оператор SELECT (до UNION) сформує список працівників, яким у лютому 2002 року нарахували зарплату, а другий оператор SELECT (після UNION) сформує список працівників, яким не нарахували зарплату у лютому 2002 року.
Результуюча таблиця матиме вид:
-
Прізвище
Нарахована сума
Іванов
400
Петров
500
Сидоров
600
Петренко
Поновлення бази даних.
Мова SQL є повнофункціональною мовою маніпулювання даними, яка може використовуватись не лише для виборок даних з бази, але і для внесення змін у базу даних. Оператори модифікації інформації в базі даних не настільки складні як оператор SELECT. Є три оператори модифікації даних в базі. Це
-
INSERT – використовується для вставки нових даних у таблицю
-
UPDATE - використовується для модифікації вже існуючої в таблиці інформації
-
DELETE - використовується для видалення з таблиці рядку(ів) даних.
Вставка нових даних.
Існує дві форми оператора INSERT. Перша використовується для вставки єдиного рядка в таблицю. Ця форма має такий формат:
INSERT INTO table_name [(column_list)]
VALUES (data_value_list)
Тут параметр table_name (Ім’я таблиці) означає або ім’я таблиці або ім’я представлення. Параметр column_list (Список стовпчиків) є списком імен одного або більше стовпчиків розділених комами. Параметр column_list не є обов’язковим. Якщо він відсутній, вважається, що використовується список всіх стовпчиків таблиці, причому імена стовпчиків розташовані в тому ж порядку в якому вони були задані в операторі CREATE TABLE (створення таблиці).
Якщо в операторі INSERT вказується конкретний список імен стовпчиків, то любі пропущені в ньому стовпчики повинні допускати значення NULL.
Параметр data_value_list (список значень) повинен наступним чином відповідати параметру column_list:
-
кількість елементів в обох списках повинна бути однакова;
-
повинна бути пряма відповідність між позиціями одного і того ж елементу в обох списках, тобто перший елемент списку data_value_list відповідає першому елементу списку column_list, другий елемент списку data_value_list відповідає другому елементу списку column_list і т.д.
-
типи даних елементів списку data_value_list повинні бути сумісними з типами даних відповідних стовпчиків з column_list.
Приклад використання конструкції INSERT…VALUES. Оператор:
INSERT INTO Osoba
VALUES(4,’Мельник’)
всталяє новий рядок в таблицю Osoba, в якому стовпчик kod приймає значення 4, а стовпчик priz – Мельник.
Якщо потрібно вставити новий рядок в таблицю з використанням лише деяких стовпчиків, потрібно в круглих дужках перерахувати через кому імена відповідних стовпчиків (параметр column_list). Наприклад, в table_a потрібно додати рядок, в якому kod=4, suma=245, а data невизначена. Оператор INSERT матиме вид:
INSERT INTO table_a (kod,suma)
VALUES(4,245)
Друга форма оператора INSERT дозволяє скопіювати множину рядків однієї таблиці в іншу. Цей оператор має такий формат:
INSERT INTO table_name [(column_list)]
SELECT …
Параметри table_name і column_list мають той же формат і зміст що й при вставці в таблицю одного рядка. Рядки, які вставляються в указану таблицю, є рядками результуючої таблиці, сформованої оператором SELECT. Всі наведені вище обмеження, що стосувались першої форми оператора INSERT, дійсні і в цьому випадку.
Наведемо приклад. Нехай нам потрібно формувати баланс по закупкам товарів за певний період і зберігати в новій таблиці balans. Таблиця balans має два стовпчики – kod - код товару і suma - загальна сума вартості цього товару.
Оператор INSERT, який поповнює таблицю balans сумарними даними з table_a за період з 1.1.2002 по 31.1.2002 року, матиме вид:
INSERT INTO balans(kod,suma)
SELECT kod, SUM(suma)
FROM table_a
WHERE data>=#1/1/2002# AND data<=#31/1/2002#
GROUP BY kod
ORDER BY kod
Результатом виконання цього оператора є таблиця balans:
-
kod
suma
1
195
2
150
Нижче наведено приклад застосування другої форми оператора INSERT, який поповнює таблицю Vidomist даними з тієї ж таблиці Vidomist. Припустімо, що в 3-му місяці зарплату кожного співробітника збільшили рівно в 1.2 рази по відношенню до зарплати в 2-му місяці. Відповідний оператор INSERT матиме вид:
INSERT INTO Vidomist (kod,year,mounth,D)
SELECT kod, year,3,D*1.2
FROM Vidomist
WHERE mounth=2
Після виконання цього оператора таблиця Vidomist матиме вид:
kod |
year |
mounth |
D |
1 |
2002 |
1 |
367.78 |
2 |
2002 |
1 |
1309.55 |
3 |
2002 |
1 |
2709.98 |
1 |
2002 |
2 |
400 |
2 |
2002 |
2 |
500 |
3 |
2002 |
2 |
600 |
1 |
2002 |
3 |
480 |
2 |
2002 |
3 |
600 |
3 |
2002 |
3 |
720 |