- •21. Об’єкти реляційної бази даних. Їх створення та модифікація засобами sql. Приклад реалізації за допомогою Data Definition Language.
- •22. Обмеження реляційної бази даних. Їх створення та модифікація засобами sql. Приклад реалізації Data Definition Language.
- •23.Операції реляційної алгебри та їх реалізація на мові sql.
- •24.Нормальні форми реляційної бази даних. Приклад структури бд та аномалії зміни даних.
- •Аномалии модификации данных
- •25.Теорія множин та реляційні бази даних. Поняття відношення. Особенности теоретико-множественных операций реляционной алгебры
- •Операции объединения, пересечения, взятия разности. Совместимость по объединению
- •Основные понятия
- •26.Поняття транзакції, властивості транзакцій.
- •5.1. Механизм транзакций
- •27.Ізоляція транзакцій. Проблеми паралельної роботи та механізми блокування. Уровни изоляции транзакций
- •5.4. Блокировки
- •28.Ізоляція транзакцій. Визначення графіку виконання та правильного графіку виконання транзакції. Уровни изоляции транзакций
- •29.Ізоляція транзакцій. Рівні ізоляції та управління рівнем ізоляції транзакції в sql сервері. Уровни изоляции
- •Синтаксис операторов sql, определяющих уровни изоляции
- •30.Типи даних та функції для роботи з ними в реляційних базах даних. Приклади використання.
- •31.Представлення (view). Приклади використання.
- •Способ создания и содержимое представлений
- •Использование
- •Команда create view
- •32.Управління доступом до даних в реляційних базах даних. Ролі, користувачі та їх права доступу. Аутентификация и авторизация
- •Методы аутентификации
- •33.Мова xml. Мова xPath. Приклади xml документу та xPath виразів.
- •Синтаксис xPath
- •34.Поняття Web сервісу, стек протоколів ws.
- •Стек протоколов Web Services
- •35. Мови html та css. Приклад html сторінки.
- •Структура html-документа
- •Структура html страницы
- •36. Реалізація ієрархічних структур на ms sql Server. Приклади знаходження елементу структури та всіх його потомків із строки, що містить шлях до елементу Иерархические данные (sql Server)
- •Родители-потомки
- •37.Оператор select. Групові операції. Приклади використання агрегатних функцій.
- •Синтаксис оператора select
- •Групповые функции в операторе select
- •Что такое агрегатные функции ?
- •Как использовать агрегатные функции ?
- •Специальные атрибуты count
- •Использование distinct
- •38.Витяг даних з кількох таблиць. Приклади використання inner join, left(right) outer join, exists, any. Выборка из нескольких таблиц.
- •Специальные операторы any или some
- •Много-столбцовые внешние ключи
- •Ограничение foreign key
- •Манипулирование реляционными данными
- •Целостность в реляционной модели данных
- •Предложение create procedure
- •Предложение alter procedure
- •40.Мова xml. Визначення схеми документу за допомогою xsd. Приклад схеми та документу, що задовольняє цій схемі. Приклад програмної валідації xml документу.
Специальные атрибуты count
Функция COUNT несколько отличается от всех. Она считает число значений в данном столбце, или число строк в таблице. Когда она считает значения столбца, она используется с DISTINCT чтобы производить счет чисел различных значений в данном поле. Мы могли бы использовать ее, например, чтобы сосчитать номера продавцов в настоящее врем описанных в таблице Порядков ( вывод показывается в Рисунке 6.3 ):
SELECT COUNT ( DISTINCT snum )
FROM Orders;
Использование distinct
Обратите внимание в вышеупомянутом примере, что DISTINCT, сопровождаемый именем пол с которым он применяется, помещен в круглые скобки, но не сразу после SELECT, как раньше. Этого использования DISTINCT с COUNT применяемого к индивидуальным столбцам, требует стандарт ANSI, но большое количество программ не предъявляют к ним такого требования.
=============== SQL Execution Log ============
| |
| SELECT COUNT (DISTINCT snum) |
| FROM Orders; |
| ==============================================|
| |
| ------- |
| 5 |
| |
| |
===============================================
Рисунок 6.3: Подсчет значений пол Вы можете выбирать многочисленные счета( COUNT ) из полей с помощью DISTINCT в одиночном запросе который, как мы видели в Главе 3, не выполнялись когда вы выбирали строки с помощью DISTINCT. DISTINCT может использоваться таким образом, с любой функцией агрегата, но наиболее часто он используется с COUNT. С MAX и MIN, это просто не будет иметь никакого эффекта, а SUM и AVG, вы обычно применяете для включения повторяемых значений, так как они законно эффективнее общих и средних значений всех столбцов.
38.Витяг даних з кількох таблиць. Приклади використання inner join, left(right) outer join, exists, any. Выборка из нескольких таблиц.
Очень часто возникает ситуация, когда выборку данных надо производить из отношения, которое является результатом слияния (join) двух других отношений. Например, нам нужно получить из базы данных publications информацию о всех печатных изданиях в виде следующей таблицы:
------------------------------------------------
|название_книги | год_выпуска | издательство |
------------------------------------------------
| | | |
| | | |
Для этого СУБД предварительно должна выполнить слияние таблиц titles и publishers, а только затем произвести выборку из полученного отношения.
Для выполнения операции такого рода в операторе SELECT после ключевого слова FROM указывается список таблиц, по которым произвоится поиск данных. После ключевого слова WHERE указывается условие, по которому производится слияние. Для того, чтобы выполнить данный запрос, нужно дать команду:
SELECT titles.title,titles.yearpub,publishers.publisher
FROM titles,publishers
WHERE titles.pub_id=publishers.pub_id;
А вот пример, где одновременно задаются условия и слияния, и выборки (результат предыдущего запроса ограничивается изданиями после 1996 года):
SELECT titles.title,titles.yearpub,publishers.publisher
FROM titles,publishers
WHERE titles.pub_id=publishers.pub_id AND
titles.yearpub>1996;
Следует обратить внимание на то, что когда в разных таблицах присутствуют одноименные поля, то для устранения неоднозначности перед именем поля указывается имя таблицы и знак "." (точка). (Хорошее правило: имя таблицы указывать всегда!)
Естественно, имеется возможность производить слияние и более чем двух таблиц. Например, чтобы дополнить описанную выше выборку именами авторов книг необходимо составить оператор следующего вида:
SELECT authors.author,titles.title,titles.yearpub,publishers.publisher
FROM titles,publishers,titleauthors
WHERE titleauthors.au_id=authors.au_id AND
titleauthors.title_id=titles.title_id AND
titles.pub_id=publishers.pub_id AND
titles.yearpub > 1996;
INNER JOIN - возвращает строки, когда есть хотя бы одно совпадение в обеих таблицах.
Концепция использования операции JOIN в MySQL. И так, пускай у нас есть две таблицы. Таблица Table A с лева и таблица Table B с права и в каждой из них есть 4 записи:
id name id name -- ---- -- ---- 1 Pirate 1 Rutabaga 2 Monkey 2 Pirate 3 Ninja 3 Darth Vader 4 Spaghetti 4 Ninja |
Давайте попоробуем использовать операцию JOIN на этих двух таблицах. И так, первый пример Inner join, оставит нам только то, что есть в Table A и Table B:
?
|
|
Full outer join - обьединение таблицы Table A с Table B:
?
|
|
Left outer join - результатом будут все записи из таблицы Table A и в таблице Table B остануться только общие записи, вместо всех остальных будет null:
?
|
|
Для того, что бы получить все записи из Table A которых нет в Table B мы так же будем использовать Left outer join исключая те значения которые нам не ныжны:
?
|
|
Для того, что бы получить набор уникальных значений для Table A и Table B будем использовать full outer join с исключениями:
?
|
|
EXISTS - это оператор, который производит верное или неверное значение, другими словами, выражение Бул ( см. Главу 4 для обзора этого термина ). Это означает что он может работать автономно в предикате или в комбинации с другими выражениями Бул использующими Булевые операторы AND, OR, и NOT. Он берет подзапрос как аргумент и оценивает его как верный если тот производит любой вывод или как неверный если тот не делает этого. Этим он отличается от других операторов предиката, в которых он не может быть неизвестным. Например, мы можем решить, извлекать ли нам некоторые данные из таблицы Заказчиков если, и только если, один или более заказчиков в этой таблице находятся в San Jose ( вывод для этого запроса показывается в Рисунке 12.1 ):
SELECT cnum, cname, city
FROM Customers
WHERE EXISTS
( SELECT *
FROM Customers
WHERE city = " San Jose' );
Внутренний запрос выбирает все данные для всех заказчиков в San Jose. Оператор EXISTS во внешнем предикате отмечает, что некоторый вывод был произведен подзапросом, и поскольку выражение EXISTS было полным предикатом, делает предикат верным. Подзапрос( не соотнесенный ) был выполнен только один раз для всего внешнего запроса, и следова-
=============== SQL Execution Log ============
| |
| SELECT snum, sname, city |
| FROM Customers |
| WHERE EXISTS |
| (SELECT * |
| FROM Customers |
| WHERE city = 'San Jose'); |
| ============================================= |
| cnum cname city |
| ----- -------- ---- |
| 2001 Hoffman London |
| 2002 Giovanni Rome |
| 2003 Liu San Jose |
| 2004 Grass Berlin |
| 2006 Clemens London |
| 2008 Cisneros San Jose |
| 2007 Pereira Rome |
=============================================
Рисунок 12.1 Использование оператора EXISTS тельно имеет одно значение во всех случаях. Поэтому EXISTS, когда используется этим способом, делает предикат верным или неверным для всех строк сразу, что это не так уж полезно для извлечения определенной информации.