
- •Державна податкова адміністрація україни
- •Поняття інформаційної системи
- •Життєвий цикл інформаційної системи
- •Історія розвитку субд
- •Реляційна модель даних
- •Математичні відношення
- •Реляційні ключі
- •Реляційна цілісність
- •Реляційна алгебра
- •Операції з’єднання
- •Нормалізовані відношення
- •Коли субд можна вважати реляційною
- •Основні типи даних визначених стандартом iso
- •Integer
- •Формати представлення дат
- •Формат time
- •Коротка характеристика сучасних субд
- •Основи мови sql
- •Insert into ustanova(kod,nazva) values(10234,’Академія дпс України’)
- •Прості запити
- •Умова відбору (ключове слово where)
- •Зрівняння
- •Використання діапазонів (between / not between)
- •Умови відбору з перевіркою входження у множину (in / not in)
- •Умови відбору з допомогою шаблону (like / not like)
- •Використання значення null в умовах відбору (is null / not null)
- •Використання множини таблиць в одному запиті
- •Імена таблиць і стовпчиків
- •З’єднання таблиць (join)
- •Ліве з’єднання (left join)
- •Сортування результату (фраза order by)
- •Групування результатів (фраза group by). Агрегатні функції
- •Використання фрази group by
- •Використання фрази having
- •Підзапити
- •Ключові слова any I all
- •Ключові слова exists I not exists
- •Комбінування результуючих таблиць (операції union, intersect і except)
- •Поновлення бази даних
- •Вставка нових даних
- •Модифікація даних (оператор update)
- •Використання inner join, left join в операторі update
- •Видалення даних з бази(оператор delete)
- •Визначення даних
- •Створення баз даних
- •Створення таблиць (оператор create table)
- •Видалення таблиць (оператор drop table)
- •Створення індексу (оператор create index)
- •Видалення індексу (оператор drop index)
- •Модифікація структури таблиці (оператор alter table)
- •Використання транзакцій
- •Управління доступом даних
- •Надання привілеїв іншим користувачам (оператор grant)
- •Відміна наданих привілеїв (оператор revoke)
Ключові слова any I all
Ключові слова ANY i ALL використовуються лише з підзапитами, які повертають один стовпчик чисел. Якщо перед підзапитом стоятиме ключове слово ALL, умова зрівняння вважається істинною, якщо вона виконується для всіх значень в результуючому стовпчику підзапиту. Наприклад, запит
SELECT *
FROM Vidomist
WHERE D> ALL (SELECT D FROM Vidomist WHERE kod IN (1,2))
Результат наведено нижче
kod |
Year |
mounth |
D |
3 |
2002 |
1 |
2709.98 |
В даному конкретному випадку внутрішній запит
SELECT D FROM Vidomist WHERE kod IN (1,2)
відбере такі значення: {367.78,1309.55,400,500}.
Очевидно, умова D> ALL (SELECT D FROM Vidomist WHERE kod IN (1,2))
еквівалентна умові D> (SELECT MAX(D) FROM Vidomist WHERE kod IN (1,2)).
Власне кажучи, цей запит еквівалентний запиту (дасть той же результат)
SELECT *
FROM Vidomist
WHERE D> (SELECT MAX(D) FROM Vidomist WHERE kod IN (1,2))
Якщо перед підзапитом стоятиме ключове слово ANY, умова зрівняння вважається істинною, якщо вона виконується хоча б для одного значення в результуючому стовпчику підзапиту. Наприклад, умова
D> ANY(SELECT D FROM Vidomist WHERE kod IN (1,2))
істинна тоді і тільки тоді коли вона істинна хоча б для одного значення, яке відбере внутрішній запит. Отже, любе D, яке більше 400, задовольнить нашій умові.
Результатом запиту
SELECT *
FROM Vidomist
WHERE D> ANY (SELECT D FROM Vidomist WHERE kod IN (1,2))
буде таблиця:
kod |
Year |
mounth |
D |
1 |
2002 |
1 |
367.78 |
2 |
2002 |
1 |
1309.55 |
3 |
2002 |
1 |
2709.98 |
2 |
2002 |
2 |
500 |
3 |
2002 |
2 |
600 |
Очевидно, цей запит буде еквівалентний запиту
SELECT *
FROM Vidomist
WHERE D> (SELECT MIN(D) FROM Vidomist WHERE kod IN (1,2))
Ключові слова 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
Петренко