- •Загальні відомості
- •Поняття відношень
- •Реляційна база даних „успішність”
- •Операції реляційної алгебри
- •Теоретико-множинні операції ра
- •Операції, властиві тільки ра
- •Реляційне числення
- •Квантор існування. З'єднання
- •Квантор загальності. Ділення
- •Типи даних
- •Створення простого запиту в sql
- •Групування даних
- •Багатотабличні запити
- •Природне з'єднання
- •Тета-з'єднання
- •Зовнішнє з'єднання
- •Використання оператора join в інструкції from
- •Операції реляційної алгебри в sql-92
- •Підзапити у sql
- •Способи включення підзапиту в запит
- •Особливості синтаксису включення підзапиту
- •Підзапит в цільовому списку
- •Підзапити в інструкції where. Некорельований підзапит
- •Корельовані підзапити
- •Квантор існування в підзапитах
- •Оператори all, any, some
- •Оператори модицікації даних
- •Мова опису даних
- •Представлення
- •Висновок
- •Лабораторний практикум Лабораторна робота № 1
- •Лабораторна робота № 2
- •Контрольні завдання по sql
- •Бібліографічний список
Квантор загальності. Ділення
Другий тип квантора - квантор загальності введений для побудови запитів, що вимагають операції ділення відносин.
Квантор загальності (FORALL) - вираз РЧ, що позначає, що деяка умова застосовується до кожного кортежу певного типу.
Запит. Перерахувати ідентифікаційні номери студентів, які здали всі предмети хоча б за один семестр.
Рішення. Побудову запиту виконаємо поетапно.
• Оскільки потрібні ідентифікаційні номери студентів, то необхідно шукати записи у відношенні СТУДЕНТ. Тому цільовий список повинен містити атрибут ID_Stud з цього відношення, а визначальний вираз оператор приналежності IN до Студент, наприклад, так:
{r.ID_Stud: r IN СТУДЕНТ ...}.
• Оскільки нас цікавлять студенти, котрі складали хоча б один раз КОЖЕН курс, то до відношення КУРС слід застосувати квантор загальності:
{r.ID_Stud: r IN СТУДЕНТ AND FORALL s IN КУРС (...)}.
• І нарешті, оскільки нас цікавлять СТУДЕНТИ, які здавали кожен курс, то відповідні кортежі повинні існувати в відношенні УСПІШНІСТЬ
{R.ID_ Stud: r IN СТУДЕНТ AND FORALL s IN КУРС (EXISTS t IN
УСПІШНІСТЬ (t.ID_Subj = s.ID_Subj AND t.ID_Stud = r.ID_ Stud))}.
Еквівалентність РА і РЧ
Насправді, вводячи поняття РЧ, ми одночасно показували його аналогічність РА. Для наочної ілюстрації еквівалентності підходів зведемо всі операції в таблицю (див. табл.1).
Операція |
Опис |
Синтаксис РА |
Синтаксис РЧ |
Проекція |
На вході – одне відношення Т1. Вибір з відношення окремих атрибутів |
[Т1.поле 1, Т2.поле2, ...] |
{r.поле1, r.поле2, ... : r IN Т1} |
Вибірка |
На вході - одне відношення Т1. Вибір з відношення окремих кортежів, які задовольняють умову відбору |
SELECT (T1 : [умова вибору]) |
{r.поле1, r.поле2 ... : r IN Т1 AND [умова вибору]} |
Об’єднання |
На вході – два об’єднувально-сумістних відношення Т1 та Т2. Включення в результуюче відношення (РВ) всіх кортежів, які входять у хоча б одне відношення. |
Т1 U Т2 |
{r.поле1, r.поле2, ... : r IN Т1 OR r IN Т2} |
Перетин |
На вході – два об’єднувально-сумістних відношення Т1 та Т2. Включення в результуюче відношення (РВ) всіх кортежів, які в обидва відношення одночасно. |
T1 л T2 |
{r.поле1, r.поле2, ... : r IN Т1 AND r IN Т2} |
Різниця |
На вході – два об’єднувально-сумістних відношення Т1 та Т2. Включення в результуюче відношення (РВ) всіх кортежів, які входять в Т1 і не входять в Т2 |
Т1-Т2 |
{r.поле1, r.поле2, ... : r IN Т1 AND r NOT IN Т2} |
Множення |
На вході – два об’єднувально-сумістних відношення Т1 та Т2. РВ складається з всіх кортежів Т1, к кожному з яких приєднані всі кортежі з Т2 |
Т1 * Т2 |
{r.поле1, r.поле2, ... , s.поле1, s.поле2, r IN Т1 AND s IN Т2} |
Об’єднання |
На вході два відношення Т1 та Т2, які мають атрибути зв’язку Т1.п1 та Т2.п2. Можливий збіг Т1 та Т2, але не полей зв’язку. РВ містить відповідні дані з обох відношень |
1. Природнє О.: JOIN (Т1, Т2). 2. Тета-О.: JOIN (T1, T2 : Т1.п1 <оператор порівняння> Т2.п2 ). 3.Зовнішнє О.: OUTERJOIN (T1, T2). |
1,2 {m5 : r IN Т1 AND EXISTS s IN Т2 (s.п1<оператор порівняння> s.^) }. 3. {m5 : (r IN Т1 AND EXISTS s IN Т2 (s.п1 <оператор порівняння> s.п2 )) OR (r IN Т1 AND NOT EXISTS s IN Т2 (s.п1 <оператор порівняння> s.п2 ))}. |
Ділення |
На вході два відношення Т1 та Т2, причому атрибути Т2 мають складати підмножину атрибутів Т1. РВ Т1 / Т2 містить ті кортежі, що входять в Т1 з кожним кортежем з Т2 |
Т1 / Т2 |
{r. поле1 : r IN Т1 AND FORALL s IN Т2 (EXISTS t IN Т1 (t.n1=s.n2) AND (r.n1=t.n1)) } |
SQL–СТРУКТУРОВАНА МОВА ЗАПИТІВ
У попередніх параграфах розглядалися теоретичні аспекти процесу обробки інформації в РБД. Перейдемо до огляду однієї потужної і загальноприйнятоїреалізації цього підходу -структурованої мови запитів (SQL).
SQLбув розробленийIBMв кінці 1970-х рр.. З тих пір в мову, звичайно, вносилися зміни і удосконалення, однакїїпринципи залишилисяпочатковими. Перш за все,SQL- непроцедурнамова високого рівня. Прикладна програма не повідомляє Машині БД, як виконати завдання, а формулює, що повинно міститися в результатах (декларативний підхід). Перший стандарт мови був прийнятий в 1989 р. Всі відомі комерційні продукти в даний час підтримують, принаймні, цей стандарт. Проте вже в 1992 р. був прийнятий новий стандартSQL, в якому, зокрема, були реалізовані безпосередньо теоретико-множинні операції РА (до цього їх можна було моделювати на основі аналогії РА з РЧ, а РЧзSQL). Тим не менш,SQLзалишається непроцедурного мовою. Третій стандартSQL, спрямований на зближення мови з об'єктно-орієнтовним підходом, був прийнятий у 1998 р. Різні виробники БД вносять в синтаксисSQLневеликі зміни. Однак як правило, стандартний запитSQLбез складнощівпереноситься на різні платформи.
За допомогою SQL можна не тільки обробляти інформацію запитами, але і керувати даними (вставка, модифікація, видалення записів, сортування), а також здійснювати супровід БД (опис типів даних і структури таблиць, видалення, зміна таблиць, індексування, управління правами доступу до даних ).
Є два SQL: Інтерактивний і Вкладений. Здебільшого обидві форми працюють однаково, але використовуються по-різному.
Інтерактивний SQL використовується для функціонування безпосередньо в базі даних. У цій формі SQL введена вами команда одразу виконується, і результат (якщо він існує) негайно відображається.
Вкладений SQL складається з команд мови, поміщених усередині програм, які зазвичай написані на деякій іншій мові (як C + +,Паскаль або ж PHP, Perl та ін., часто СУБД надає своє процедурне розширення - мова Transact SQL від MS SQL Server або PL / SQL від ORACL). Це робить програми більш потужними і ефективними. Однак допускаючи інші мови, доводиться мати справу зі структурою SQL і стилем управління даними, який вимагає деяких розширень до інтерактивного SQL.
У даному посібнику мова піде про інтерактивну форму SQL. Однак все, що ви дізнаєтесь щодо інтерактивного SQL, можна застосувати і до вкладеної форми.