Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

SUBD Labs 1-7

.pdf
Скачиваний:
54
Добавлен:
12.02.2016
Размер:
671.43 Кб
Скачать

Лабораторна робота №5

з курсу “СУБД” на тему:

“Виконання теоретико-множинних операцій реляційної алгебри засобами SQL”

Мета роботи: Розробити SQL запити для виконання операцій реляційної алгебри: об’єднання, перетину, різниці, декартового добутку.

Короткі теоретичні відомості.

Реляційна алгебра – це множина операцій, що виконуються над відношеннями і мають за мету утворення нових відношень або їх станів. Реляційна алгебра визначає операції, які однаковим чином реалізуються в усіх базах даних реляційного типу, незалежно від їх змісту і технологій, за допомогою яких вони реалізовані. Тобто реляційна алгебра представляє собою процедурну мову обробки реляційних таблиць.

Реляційна алгебра складається з таких операцій: об’єднання, перетин, різниця, декартовий добуток, проекція, селекція, натуральне з’єднання, умовне з’єднання, а також операції включення/вилучення кортежу з відношень, включення/вилучення атрибуту з відношення, зміни параметрів атрибуту.

Перші чотири операції взяті з математичної теорії множин і практично співпадають з операціями над множинами. Це зручно, оскільки реляційні таблиці є множинами, і цілком природно застосовувати до них операції над множинами.

Об’єднанням двох відношень R та S з відповідними множинами атрибутів (A1, A2 ,..., An ) називається відношення T , що має ту саму множину атрибутів (A1, A2 ,..., An ) , а

його інформаційне наповнення утворюється кортежами першого та другого відношень за вилученням повторень:

Об’єднання дозволяє нам комбінувати дані з двох таблиць з однаковими множинами атрибутів. Однакові множини атрибутів потрібні для того, щоб результатом виконання операції об’єднання була реляційна таблиця.

Перетином двох відношень R та S з відповідними множинами атрибутів (A1, A2 ,..., An ) називається відношення T , що має ту саму множину атрибутів (A1, A2 ,..., An ) , а

його інформаційне наповнення утворюється кортежами, які є спільними для цих двох відношень:

Операція перетину дозволяє нам ідентифікувати рядки, спільні для двох таблиць.

Різницею двох відношень R та S з відповідними множинами атрибутів (A1, A2 ,..., An )

називається відношення T , що має ту саму множину атрибутів (A1, A2 ,..., An ) , а його

інформаційне наповнення утворюється кортежами першого відношення за вилученням кортежів, які є спільними з другим відношенням:

Операція різниці дозволяє ідентифікувати ті рядки, які є в одній таблиці, але відсутні в іншій.

Декартовим добутком двох відношень R та S з відповідними множинами атрибутів (A1, A2 ,..., An ) та (B1, B2 ,..., Bm ) називається нове відношення T , множина атрибутів якого

складається з об’єднання множини атрибутів двох відношень, а кожен кортеж інформаційного наповнення утворюється шляхом конкатенації (сполучення) кожного кортежу першого відношення з кожним кортежем другого відношення.

Для реалізації теоретико-множинних операцій на мові SQL використовують директиву SELECT, спрощений опис якої наведено далі, а також функції роботи з множинами значень

IN(), NOT IN().

SELECT

[ALL | DISTINCT | DISTINCTROW ]

елемент_вибірки [, елемент_вибірки] [FROM перелік_таблиць]

[WHERE умова_відбору]

елемент_вибірки

Вираз, або назва поля, значення якого потрібно вибрати. Символ «*» позначає всі поля.

перелік_таблиць

Назва таблиці, з якої здійснюється вибір значень.

умова_відбору

Вказує умови відбору потрібних записів.

DISTINCT | DISTINCTROW

Видалення з результату рядків-дублікатів. За замовчуванням вибираються всі рядки.

Для того, щоб виконати операцію об’єднання таблиць, потрібно за допомогою команди UNION об’єднати результати вибору рядків з двох, або більше, таблиць. Наведемо синтаксис команди.

SELECT ...

UNION [ALL | DISTINCT] SELECT ...

[UNION [ALL | DISTINCT] SELECT ...]

Хід роботи.

Перед виконанням завдання, потрібно сформувати дві таблиці з однаковими множинами атрибутів. Візьмемо за основу таблицю користувачів Author і виконаємо вибір двох множин записів, які перетинаються. Результат збережемо в таблицях Author1 і Author2.

CREATE TABLE mycms.author1

AS SELECT authorID, login, created FROM mycms.author WHERE created < ’2009-01-01’;

Таблиця Author1:

CREATE TABLE mycms.author2

SELECT authorID, login, created FROM mycms.author

WHERE created < 20090201;

Таблиця Author2:

1. Запит на виконання об’єднання Author1 i Author2:

SELECT * FROM Author1

UNION SELECT * FROM Author2

2. Запит на виконання перетину:

SELECT * FROM author1

WHERE authorID IN (SELECT authorID FROM author2);

3. Запит на виконання різниці Author2 i Author1:

SELECT * FROM author2

WHERE authorID NOT IN (SELECT authorID FROM author1);

4. Запит на виконання декартового добутку двох таблиць:

SELECT * FROM author1, author2;

Висновок: на цій лабораторній роботі було розглянуто операції реляційної алгебри та їх реалізація на мові SQL. Здійснено об’єднання, перетин, різницю та декартовий добуток двох таблиць.

Лабораторна робота №6

з курсу “СУБД” на тему:

“Виконання реляційних операцій реляційної алгебри засобами SQL”

Мета роботи: Розробити SQL запити для виконання операцій реляційної алгебри: проекції, селекції, натурального з’єднання, умовного з’єднання.

Короткі теоретичні відомості.

В реляційну алгебру крім теоретико-множинних операцій входять ще й реляційні операції над відношеннями. Зокрема проекція, селекція, натуральне та умовне з’єднання.

Проекцією відношення R(A1, A2 ,..., An )

на задану підмножину множини атрибутів

A' {Ai1, Ai2 ,..., Aik } A називають множину

R[A'] проекцій кортежів відношення на ці

атрибути за вилученням повторень. Тобто операція створення проекції створює нову таблицю шляхом виключення певних стовпців з існуючої таблиці. Для створення проекції – реляційної таблиці, що складається лише з деяких визначених стовпців іншої реляційної таблиці – ми просто вказуємо початкову таблицю, а далі перелічуємо ті стовпці, які хочемо залишити.

Результатом операції селекції деякого відношення R за заданим критерієм є нове відношення, яке утворюється з тих кортежів, значення атрибутів яких роблять істинною умову, сформульовану критерієм select(R, ) R ' . Критерій селекції – це логічний вираз, який порівнює значення атрибутів кортежу з деякими заданими величинами. Вимоги до значень атрибутів критерію формулюються через порівняння значень (=, >, <, >=, <= тощо).

Операція натурального з’єднання визначається для двох відношень R(A1, A2 ,..., An ) та

S(B1, B2 ,..., Bm ) , де A B 0 , тобто відношення мають однакові атрибути. Результатом

операції є нове відношення, множина атрибутів якого є об’єднанням множин атрибутів першого та другого відношень, а кожен кортеж утворюється шляхом об’єднання тих кортежів відношень, в яких значення спільних атрибутів співпадають:

Дана операція призначена для утворення більш крупних відношень з більш дрібних. Результатом умовного з’єднання двох відношень R(A1, A2 ,..., An ) та S(B1, B2 ,..., Bm ) , де

A B 0 , є нове відношення, множина атрибутів якого є об’єднанням множини атрибутів першого та другого відношень, а кожен кортеж утворюється шляхом об’єднання тих кортежів відношень, для яких виконується критерій умовного з’єднання за атрибутами:

Для утворення умовного з’єднання необхідно визначити критерій або умову порівняння атрибутів з вказаним виразом або між собою.

Для створення проекції на мові SQL можна використовувати директиву створення віртуальних таблиць CREATE VIEW:

CREATE VIEW ім’я_проекції [(перелік_полів)]

AS SELECT DISTINCT (перелік_полів) FROM ім’я_таблиці

Хід роботи.

Таблиця коментарів Comment:

Таблиця користувачів Author1:

1. Запит на виконання проекції:

CREATE VIEW comment2 AS SELECT DISTINCT authorID, text, posted FROM comment;

Результати запиту:

2. Запит на виконання селекції коментарів за останній місяць:

SELECT *

FROM comment2

WHERE posted >= ’2009-03-01’ AND posted < ’2009-04-01’

Результати запиту:

3. Запит на виконання натурального з’єднання Author1 i Comment2:

SELECT author1.authorId, author1.login, author1.created, comment2.text, comment2.posted

FROM author1, comment2

WHERE author1.authorID = comment2.authorID;

Результати запиту:

4.Запит на виконання умовного з’єднання. Додатковою умовою тут буде порівняння дати коментаря і дати реєстрації користувача, з метою виявлення помилок в базі.

SELECT author1.authorId, author1.login, author1.created, comment2.text, comment2.posted

FROM author1, comment2

WHERE author1.authorID = comment2.authorID AND comment2.posted < author1.created;

Результом запиту є порожня множина, отже суперечливості в таблицях немає:

Висновок: на цій лабораторній роботі було розглянуто операції реляційної алгебри та здійснено проекцію, селекцію, натуральне та умовне з’єднання таблиць.

Лабораторна робота №7

з курсу “СУБД” на тему:

“Запити на вибір даних з таблиць бази даних”

Мета роботи: Розробити SQL запити відбору даних з одиничних та з’єднаних таблиць, в тому числі з використанням підзапитів, натурального, умовного та лівого з’єднання.

Короткі теоретичні відомості.

Для вибору даних з таблиць використовується директива SELECT, яка може містити інші директиви SELECT (підзапити, або вкладені запити) та директиви з’єднання таблиць.

SELECT

[ALL | DISTINCT | DISTINCTROW ] [STRAIGHT_JOIN]

[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]

елемент_вибірки [, елемент_вибірки ...] [FROM перелік_таблиць]

[WHERE умова_відбору]

[GROUP BY {ім’я_поля | синонім | позиція_поля} [ASC | DESC], ...]

[HAVING умова_відбору]

[ORDER BY {ім’я_поля | синонім | позиція_поля} [ASC | DESC], ...]

[LIMIT {к-сть_рядків [OFFSET зміщення]}

[PROCEDURE ім’я_процедури(аргументи)] [INTO OUTFILE 'ім’я_файлу' опції_експорту

| INTO DUMPFILE 'ім’я_файлу' | INTO змінна [, змінна]]

Параметри:

SELECT

Вказує поля, константи та вирази, що будуть відображатися у результатах запиту. Директива вимагає чіткого дотримання порядку ключових слів FROM, WHERE і т.д.

елемент_вибірки

Вказує елемент, який буде включатися в результати відбору. Такими елементами можуть бути: ім’я поля, константа або вираз. Кожному елементу можна присвоїти ім’я- псевдонім, яке буде відображатись у результатах запиту. Для цього після назви елемента слід дописати AS псевдонім.

перелік_таблиць

Назви таблиць, з яких здійснюється вибір значень. Тут можна задавати синоніми назвам таблиць (ім’я_таблиці AS синонім), використовувати підзапити SELECT для формування таблиці з вказаним синонімом, з’єднувати декілька таблиць.

WHERE

Вказує критерії порівняння (або підзапити) для відбору рядків.

GROUP BY

Групує (і одночасно сортує) рядки за вказаними полями. Поля можна вказувати за іменами, синонімами або порядковими номерами в таблиці.

ORDER BY

Сортує рядки за вказаними полями. За замовчуванням – за зростанням значень (ASC).

HAVING

Дає можливість застосування до значень полів агрегатних функцій (COUNT, AVG, MIN, MAX тощо) при відборі чи групуванні рядків. Після слова WHERE ці функції не працюють, однак у всіх інших випадках слід використовувати саме WHERE.

LIMIT

Обмежує кількість рядків, повернутих в результаті запиту.

OFFSET

Вказує зміщення для LIMIT – з якого рядка в результатах запиту почати відбирати потрібну кількість рядків.

PROCEDURE

Задає назву збереженої процедури, яка повинна обробляти результат запиту.

INTO

Вказує місце, куди будуть збережені результати запиту. Це може бути як зовнішній файл, так і параметри чи змінні, визначені користувачем. Кількість змінних має бути рівна кількості полів у результаті.

DISTINCT | DISTINCTROW

Видалення з результату рядків-дублікатів. За замовчуванням вибираються всі рядки.

STRAIGHT_JOIN

Опція, яка строго задає порядок вибирання кортежів зі з’єднуваних таблиць в порядку переліку таблиць. (Оптимізатор запитів MySQL іноді змінює цей порядок.)

SQL_CACHE | SQL_NO_CACHE

Явним чином вмикає/вимикає зберігання результатів запиту у кеші запитів MySQL. За замовчуванням, кешування запитів залежить від системної змінної query_cache_type.

SQL_CALC_FOUND_ROWS

Вказує, що при виконанні запиту слід обчислити загальну кількість рядків в результаті, ігноруючи опцію обмеження LIMIT. Цю кількість рядків потім можа отримати командою SELECT FOUND_ROWS().

Для вибору записів зі з’єднаних таблиць використовується директива SELECT разом із директивами JOIN у переліку таблиць. Наприклад:

SELECT * FROM author INNER JOIN comment

ON author.authorID = comment.authorID;

Параметри директиви:

INNER JOIN

Внутрішнє з’єднання. Результати вибору будуть містити тільки ті рядки, для яких існують один або більше відповідних рядків з іншої таблиці. В MySQL – є синонімом директиви CROSS JOIN. Слід зауважити, що вибір рядків директивою SELECT з кількох таблиць, вказаних через кому, є аналогічним до явного використання директиви INNER JOIN. В обох випадках MySQL формує декартовий добуток усіх кортежів, і з результату вибирає лише ті, для яких виконується умова відбору (порівняння) ON.

LEFT JOIN

Вказує на те, що результати вибору будуть містити всі рядки з таблиці, яка стоїть зліва від слова JOIN і тільки відповідні їм рядки з таблиці справа (ті, для яких виконується вказана умова). Якщо відповідний рядок відсутній, виводяться значення NULL.

RIGHT JOIN

Вказує на те, що результати вибору будуть містити всі рядки з таблиці, яка вказана справа від JOIN і тільки відповідні їм рядки з таблиці зліва. Для сумісності на практиці використовують в основному LEFT JOIN.

ON умова

Вказує поля, за якими слід з’єднувати таблиці.

Замість ON можна також використовувати USING перелік_спільних_полів. В цьому випадку спільне поле буде відображене в результатах запиту лише один раз.

NATURAL JOIN

Еквівалент внутрішньому з’єднанню за всіма полями (з опцією USING *).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]