
- •Тема 5. Мова реляційних запитів sql.
- •Роль та історія розвитку sql.
- •Простий приклад
- •Історія
- •Стандарти
- •Питання сумісності
- •Переваги стандартів sql
- •1. Незалежність від конкретної субд
- •2. Наявність стандартів
- •3. Декларативність
- •Недоліки стандартів sql
- •1. Невідповідність реляційної моделі даних
- •Коротко про стандарт sql:2003
- •Cтворення таблиці
- •Видалення таблиці
- •Вираз select
- •Частина from
- •Частина where
- •Відповідність шаблону
- •Значення null
- •Частина order by
- •Приклад нотації для визначення оператора select в Oracle
- •Декартів добуток
- •Тета-з’єднання
- •Натуральне з’єднання
Частина order by
У загальному випадку рядки в результуючій таблиці SQL-запиту ніяк не впорядковані. Однак їх можна необхідним чином відсортувати, для чого в оператор SELECT , поміщається фраза ORDER BY, яка сортує дані вихідного набору в заданій послідовності. Сортування може виконуватися за кількома полями, в цьому випадку вони перераховуються за ключовим словом ORDER BY через кому. Спосіб сортування задається ключовим словом, вказуються в рамках параметра ORDER BY слідом за назвою поля, по якому виконується сортування. За замовчуванням реалізується сортування за зростанням. Явно вона задається ключовим словом ASC. Для виконання сортування у зворотній послідовності необхідно після імені поля, по якому вона виконується, вказати ключове слово DESC. Фраза ORDER BY дозволяє впорядкувати вибрані записи в порядку зростання або зменшення значень будь-якого стовпця або комбінації стовпців, незалежно від того, чи присутні ці стовпці в таблиці результату чи ні. Фраза ORDER BY завжди повинна бути останнім елементом в операторі SELECT .
Приклад 6. Вивести список клієнтів в алфавітному порядку.
SELECT Клієнт.Фамілія, Клієнт.Фірма
FROM Клиент
ORDER BY Клієнт.Фамілія
Приклад нотації для визначення оператора select в Oracle
Нижче наведено тільки перші два рівня деталізації опису семантики запису SELECT оператора в SQL, детальну та повну інформацію можна знайти для Oracle 10g за посиланням:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_10002.htm#SQLRF01702
select::=
subquery::=
Або те саме в текстовому вигляді:
Query ::= subquery [ for_update_clause ] ;
subquery ::= [subquery_factoring_clause ]
SELECT
[ hint ]
[ { { DISTINCT | UNIQUE }
| ALL
}
]
select_list
FROM { table_reference [, table_reference ]...
| join_clause
| ( join_clause )
}
[ where_clause ]
[ hierarchical_query_clause ]
[ group_by_clause ]
[ HAVING condition ]
[ model_clause ]
[ { UNION [ ALL ]
| INTERSECT
| MINUS
}
(subquery)
]
[ order_by_clause ]
Співвідношення реляційної алгебри та структурованої мови запитів
Проекція
Оператор проекції вибирає з відношення R нове відношення, що містить тільки деякі з стовпці R.
Отримати відношення, що включає тільки задані атрибути відношення R:
RA
SQL SELECT A1, A2,…, An
FROM R;
Селекція
Оператор селекції після застосування до відношення R дає нове відношення з підмножиною кортежів R.
Кортежі в результуючому відношенні задовольняють деякій умові C, що включає атрибути R:
RA
SQL SELECT *
FROM R
WHERE C;
Частина WHERE SQL синтаксису відповідає
Селекція: синтаксис умови
Синтаксис: схожий на умовами в мовах програмування.
Порівнювані значення – констант та атрибути відношень.
Ми можемо застосовувати звичайні арифметичні оператори до числових значень для їх порівняння:
RA Порівняти значення з використанням стандартних арифметичних операторів.
SQL Порівняти значення за допомогою =, <>, <, >, <=, >=.
Операції над множинами: Об'єднання
Об'єднанням двох відношень R і S є множина кортежів, що належать R або S або обом відношенням одночасно.
R і S повинні мати однакові набори атрибутів і типи атрибутів повинні бути однаковими.
Атрибути R і S мають з’являтись в однаковому порядку.
RA
SQL (SELECT * FROM R)
UNION
(SELECT * FROM S);
Операції над множинами: перетин
Перетином двох відношень R і S є множина кортежів, які присутні одночасно в R і S.
Ті ж умови на R і S, як і для оператору об'єднання UNION.
RA
SQL (SELECT * FROM R)
INTERSECT
(SELECT * FROM S);
Операції над множинами: Різниця
Різницею двох відношень R і S є множина кортежів, які знаходяться в R, але не в S.
Ті ж умови на R і S, як і для оператору об'єднання UNION.
RA
SQL (SELECT * FROM R)
EXCEPT
(SELECT * FROM S);
Порівняйте:
-
(SELECT * FROM R)
EXCEPT
((SELECT * FROM R)
EXCEPT
(SELECT * FROM S));
(SELECT * FROM R);
INTERSECT
(SELECT * FROM S);