Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
m_DBSQL_mu.docx
Скачиваний:
28
Добавлен:
17.03.2016
Размер:
373.51 Кб
Скачать

Реляційне числення

Операції РЧ, так само, як і операції РА, маніпулюють реляційними таблицями, але синтаксис операцій позбавлений звичного оператора присвоєння, що відокремлює результуючі відношення від операндів і параметрів операції. Запит в РЧмістить дві головні складові, якілежатьв {} і розділені «:»

{цільовий список: визначаючий вираз}.

Цільовий Список- визначає атрибути результуючого відношення.

Визначаючий Вираз- умови, що обмежують входження елементів у відношення.

6-в-одному: операції об'єднання, перетину, різниці, добутку, вибірки, проекції

Запит.Хто зі студентів проживає за адресою А2?

Рішення. {r.СПрізв: r IN СТУДЕНТ AND r.САдреса= 'А2'}.

Подібний запит містить майже всі конструкції синтаксису РЧ. Розглянемо їх докладніше.

{}. Фігурні дужки позначають, що відповіддю на запит будеМНОЖИНАзначень даних. Що саме входить уцю множинупояснюється в дужках.

Цільовий список. У нашому випадку це вираз r.СПрізв, де r-змінна, що позначає довільну рядок таблиці, ім'я якої визначається у визначальному вираженні. Ми будемо позначати рядки-змінні маленькими латинськими літерами - r, s, p, q ...

• Визначальний вираз. У нашому випадку це вираз r IN СТУДЕНТ AND r.САдреса= 'А2'. Розглянемо його складові частини.

• rIN СТУДЕНТ. Оператор IN - визначає ім'я відношення, з якого беруться рядки r.

• r.САдреса= 'А2'. Умова, за якою відбираються записи в результуюче відношення. Умова будується за допомогою стандартних операцій логіки AND, OR, NOT, шести операцій порівняння (=,! =,>,> =, <, <=) І оператора IN.

Таким чином, розглянутий приклад демонструє запис операцій вибірки SELECT і створення проекцій. Крім того, з розглянутих вже конструкцій можна отримати і всі аналоги теоретико-множинних операцій. Обговоримо це коротко на вже знайомих нам прикладах. Відзначимо, що таблиці повинні бути об'єднувально-сумісними.

Об'єднання

Запит. Отримати список всіх студентів на основі відношень КОНСУЛЬТАНТ і КОНСУЛЬТОВАНИЙ.

Рішення. {r.ID_Stud, г.СПрізв, г.САдреса: r IN КОНСУЛЬТОВАНИЙ ОR r IN КОНСУЛЬТАНТ}.

Оскільки результати запитів будуть збігатися з відношеннями, що виходять в результаті виконання відповідних операцій РА, ми не будемо зупинятися на конкретних прикладах.

Перетин

Запит.Визначити, хто з студентів консультується, сам будучи консультантом.

Рішення.{r.ID_Stud,r.СПрізв,r.САдреса:rINКОНСУЛЬТОВАНИЙ ANDrINКОНСУЛЬТАНТ}.

Різниця

Запит.Визначити, хто з студентів консультується, сам НЕ будучи консультантом.

Рішення.{r.ID_Stud,r.СПрізв,r.САдреса:rINКОНСУЛЬТОВАНИЙ ORrNOTINКОНСУЛЬТАНТ}. І знову А-В <> В-А.

Запит.Визначити, хто з студентів консультує, але сам НЕконсультується.

Рішення. {r.ID_Stud, r.СПрізв, r.САдреса: r NOT IN КОНСУЛЬТОВАНИЙ OR r IN КОНСУЛЬТАНТ}.

Множення

Запит.Данідві РТ: А = <Х, У>; В = <W,Z>

Рішення. {r.X, r.Y, s.W, s.Z: r IN А AND s IN B}.

Квантор існування. З'єднання

Для введення двох залишившихся операцій в РЧ розглядаються два квантори.

Квантор Існування (ЕХІSTS) - вираз РЧ, що означаєіснуванняХОЧА Б ОДНОГОрядка, що задовольняє умовівизначаючоговираза.

Квантор існування дозволяє розглядати кілька пов'язаних відносин, причому в його термінах передбачено і природне, і зовнішнє, і тета-з'єднання. Розглянемо приклади.

Природне з'єднання

Запит. Хто здавав курс К1?

Рішення. Побудову запиту виконаємо поетапно.

• На питання ХТО? необхідно шукати кортежі у відношенні СТУДЕНТ. Тому цільовий список повинен містити атрибути з цього відношення, а визначаючий вираз - оператор приналежності кортежів до Студент, наприклад, так:

{r.ID_Stud, r.СПрізв: r IN СТУДЕНТ ...}

• Інформація про здані курси міститься у відношенні УСПІШНІСТЬ. При цьому в результуюче відношення буде включатисЬ інформація про студентів, для яких існує хоча б один кортеж в УСПІШНОСТІ. Умова існування задається одноіменнім квантором EXISTS, за яким слідує умова з'єднання, яка вказується, як у випадку природного, так і тета-з'єднання: {r.ID_Stud, r.СПрізв: r IN СТУДЕНТ AND EXISTS s IN УСПІШНІСТЬ

(s.ID_Stud = r.ID_Stud ...)}.

• І нарешті, необхідно додати вибірку по курсу К1. В результаті будемо мати наступний вираз РІ: {r.ID_Stud, r.СПрізв: r IN СТУДЕНТ AND EXISTS s IN

УСПІШНІСТЬ (s.ID_Stud = r.ID_Stud AND s.ID_Subj = 'K1'}.

Слід зазначити, що дослідження кортежів на предмет розміщення їх у результуюче відношення починається з першого кортежу відношення СТУДЕНТ (його значення тимчасово присвоюється змінної r), для r шукається відповідний (по ID_Stud) кортеж s відносно успішності. Якщо такий кортеж знайдений, то він перевіряється на задоволення умові. Якщо ж і з цим все в порядку, то потрібні атрибути поточного кортежу СТУДЕНТ'а поміщається в результуюче відношення, якщо ж умова не виконується, то пошук переходить до наступного кортежу в Успішності, значення якого тепер пишеться в s. Якщо перегляд всього відношення УСПІШНІСТЬ завершений і або кортеж s, відповідний r, не знайдений, або жоден із виявлених кортежів не має номером курсу К1, то кортеж r в результуюче відношення не поміщається.

Приклад запиту до декількох зв'язаних відношень.

Запит. Хто здавав вищу математику за 1 семестр?

Рішення. {r.ID_Stud, r.СПрізв: r IN СТУДЕНТ AND EXISTS s IN УСПІШНІСТЬ (s.ID_Stud = r.ID_Stud AND s.Семестр = '1 'AND EXISTS t IN КУРС (t.ID_Subj = s.ID_Subj AND t.Найменування = 'Вища математика '))}.

Тета-з'єднання

Запит. Ідентифікувати студентів, чий консультант Андреєва А.А.

Рішення. {r.ID_Stud, r.СПрізв: r IN СТУДЕНТ AND EXISTS s IN СТУДЕНТ (s.ID_Stud = r.Консультант AND s.СПрізв = 'Андреєва А.А.')}.

Зовнішнє з'єднання

Зовнішнє з'єднання виконується в рамках квантора існування також природно.

Запит. Приєднати інформацію про успішність до інформації про студентів.

Рішення. {r.ID_ Stud, r.СПрізв, r.САдреса, r.Консультант, s.ID_ Subj, s.Семестр, s.Оцінка : r IN СТУДЕНТ OR EXISTS s IN УСПІШНІСТЬ (s. ID_Stud = r.ID_Stud)}.

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