
- •"Понимание sql"
- •Введение в реляционную базу данных гл.1 введение
- •Понимание sql
- •Что такое - реляционная база данных?
- •Описание реляционных баз данных связывание одной таблицы с другой
- •Порядок строк произволен
- •Идентификация строк ( первичные ключи )
- •Столбцы именуются и нумеруются
- •************** Работа с sql **************
- •Гл.2 sql : обзор
- •Понимание sql
- •Sql: краткий обзор
- •Что делает ansi ?
- •Интерактивный и вложенный sql
- •Субподразделения sql
- •Sql несогласованности
- •Что такое - пользователь?
- •Условия и терминология
- •************** Работа с sql **************
- •Гл.3 использование sql для извлечения информации из таблиц
- •Что такое запрос ?
- •Где применяются запросы ?
- •Команда select
- •Выбирайте всегда самый простой способ
- •Описание select
- •Переупорядочение столбца
- •Удаление избыточных данных
- •Distinct вместо all
- •Квалифицированный выбор при
- •************* Работа с sql ***************
- •Гл.4 использование реляционных и булевых операторов для создания более изощренных предикатов
- •Понимание sql
- •************** Работа с sql **************
- •Гл.5 использование специальных операторов в условиях понимание sql
- •Работа с нулевыми( null ) значениями
- •Использование not со специальными операторами
- •************** Работа с sql **************
- •Гл.6 обобщение данных с помощью агрегатных функций понимание sql
- •Как использовать агрегатные функции ? cуммирование данных с помощью агрегатных функций
- •Специальные атрибуты count
- •Использование distinct
- •Использование count со строками, а не значениями
- •Включение дубликатов в агрегатные функции
- •Агрегаты построенные на скалярном выражении
- •Предложение group by
- •Предложение having
- •Не делайте вложенных агрегатов
- •************** Работа с sql **************
- •Гл.7 формирование выводов запросов
- •Понимание sql
- •Столбцы вывода
- •Помещение текста в вашем выводе запроса
- •Упорядочение с помощью многочисленых столбцов
- •Упорядочение агрегатных групп
- •Упорядочение вывода по номеру столбца
- •Упорядочение с помощью опретора null
- •************** Работа с sql **************
- •Гл.8 запрашивание многочисленых таблиц также как одной
- •Имена таблиц и столбцов
- •Создание обьединения
- •Объединение таблиц через справочную целостность
- •Объединения таблиц по равенству значений в столбцах и другие виды объединений
- •Объединение более двух таблиц
- •************** Работа с sql **************
- •Гл.9 объединение таблицы с собой
- •Псевдонимы
- •Устранение избыточности
- •Проверка ошибок
- •Больше псевдонимов
- •Еще больше комплексных объединений
- •************** Работа с sql **************
- •Гл.10 вставка одного запроса внутрь другого
- •Значения, которые могут выдавать подзапросы
- •Distinct с подзапросами
- •Предикаты с подзапросами являются необратимыми
- •Использование агрегатных функций в подзапросах
- •Использование подзапросов которые выдают много строк с помощью оператора in
- •Подзапросы выбирают одиночные столбцы
- •Использование выражений в подзапросах
- •Подзапросы в предложении having
- •*************** Работа с sql *************
- •Гл.11 соотнесенные подзапросы
- •Как сформировать
- •Как работает соотнесенный подзапрос
- •Использование соотнесенных подзапросов для нахождения ошибок
- •Сравнение таблицы с собой
- •Соотнесенные подзапросы в предложении having
- •Соотнесенные подзапросы и обьединения
- •*************** Работа с sql *************
- •Гл.12 использование оператора exists
- •Выбор столбцов с помощью exists
- •Использование exists с соотнесенными подзапросами
- •Комбинация из exists и обьединения
- •Использование not exists
- •Exists и агрегаты
- •Более удачный пример подзапроса
- •Гл.13 использование операторов any, all и some
- •Использование операторов any, all, и some
- •Использование операторов in или exists вместо оператора any
- •Использование операторов any, all, и some
- •Как any может стать неоднозначным
- •Равенства и неравенства
- •Правильное понимание any и all
- •Any и all вместо exists с пустым указателем( null )
- •Использование count вместо exists
- •Гл.14 использование предложения union
- •Запросов в один
- •Когда вы можете делать объединение между запросами ?
- •Union и устранение дубликатов
- •Использование строк и выражений с union
- •Внешнее объединение
- •Гл.15 ввод, удаление и изменение значений полей
- •Insert (вставить),
- •Вставка пустых указателей (null)
- •Именование столбца для вставки (insert)
- •Вставка результатов запроса
- •Модифицирование только определенных строк
- •Команда update для многих столбцов
- •Использование выражений для модификации
- •Гл.16 использование подзапросов с командами модификации
- •Не вставляйте дубликаты строк
- •Использование подзапросов созданых во внешней таблице запроса
- •Столкновение с ограничениями подзапросов команды dml
- •************** Работа с sql **************
- •Гл.17 создание таблиц понимание sql
- •Уникальность индекса
- •Удаление индексов
- •Изменение таблицы после
- •**************** Работа с sql ************
- •Гл.18 ограничение значений ваших данных понимание sql
- •Объявление ограничений
- •Использование ограничений для исключения пустых( null ) указателей
- •Убедитесь что значения - уникальны
- •Уникальность как ограничение столбца
- •Уникальность как ограничение таблицы
- •Ограничение первичных ключей
- •Первичные ключи более чем одного поля
- •Проверка значений полей
- •Использование - check, чтобы предопределять допустимое вводимое значение
- •Проверка условий базирующийся на многочисленых полях
- •Установка значений поумолчанию
- •Гл.19 поддержка целостности ваших данных понимание sql
- •Много-столбцовые внешние ключи
- •Смысл внешнего и родительского ключей
- •Как можно поля представить в качестве внешних ключей
- •Внешний ключ как ограничение таблицы
- •Внешний ключ как ограничение столбцов
- •Не указывать список столбцов первичных ключей
- •Как справочная целостность ограничивает значения родительского ключа
- •Первичный ключ как уникальный внешний ключ
- •Ограничения внешнего ключа
- •Что случится, если вы выполните команду модификации
- •Действие ограничений
- •Внешние ключи которые ссылаются обратно к их подчиненым таблицам
- •*************** Работа с sql *************
- •Гл.20 введение: представления
- •Модифицирование представлений
- •Комбинирование предикатов представлений и основных запросов в представлениях
- •Групповые представления
- •Представления и обьединения
- •Представления и подзапросы
- •Что не могут делать представления
- •Удаление представлений
- •*************** Работа с sql *************
- •Гл.21 изменение значений с помощью представлений
- •Определение модифицируемости представления
- •Модифицируемые представления и представления только_чтение.
- •Что является - модифицируемыми представлением
- •Проверка значений
- •Предикаты и исключенные поля
- •Проверка представлений которые базируются на других представлениях
- •************** Работа с sql **************
- •Гл.22 кто что может делать в базе данных
- •Регистрация
- •Стандартные привилегии
- •Команда grant
- •Группы привелегий, группы пользователей
- •Ограничение привилегий на определенные столбцы
- •Использование аргументов all и public
- •Предоставление привелегий с помощью with grant option
- •Отмена привилегий
- •Использование представлений для фильтрации привелегий
- •Кто может создавать представления?
- •Ограничение привилегии select для определенных столбцов
- •Предоставление доступа только к извлеченным данным
- •Использование представлений в качестве альтернативы к ограничениям
- •Типичные привилегии системы
- •Создание и удаление пользователей
- •Гл.23 глобальные аспекты sql
- •Переименование с тем же самым именем
- •Одно имя для каждого
- •Удаление синонимов
- •Как база данных распределена для пользователей ?
- •Когда сделанные изменения
- •Как sql общается сразу со многими пользователями
- •Типы блокировок
- •Другие способы блокировки данных
- •************** Работа с sql **************
- •Гл.24 как данные sql содержатся в упорядоченном виде
- •Каталог системы
- •Типичный системный каталог
- •Использование представлений в таблицах каталога
- •Разрешить пользователям видеть(только) их собственные объекты
- •Комментарий в
- •Systemsynons - синонимы для таблиц в базе данных
- •************** Работа с sql **************
- •Гл.25 использование sql с другим языком ( вложенный sql )
- •Что такое - вложение sql
- •Зачем вкладывать sql?
- •Как делаются вложения sql.
- •Использование переменных
- •Объявление переменных
- •Извлечение значений переменных
- •Предложение whenever
- •Использование переменной indicator для эмуляции null значений sql
- •Другое использование переменной indicator
- •************ Работа с sql ***************
- •Приложение a ответы для упражнений
- •Глава 1
- •Глава 2
- •Глава 3
- •Глава 5
- •Глава 6
- •Глава 7
- •Глава 8
- •Глава 9
- •Глава 10
- •Глава 11
- •Глава 12
- •Глава 13
- •Глава 14
- •Глава 15
- •Глава 16
- •Глава 18
- •Глава 19
- •Глава 20
- •Глава 21
- •Глава 22
- •Глава 23
- •Глава 25
- •Приложение b типы данных в sql
- •Эквивалентные типы
- •Приложение c некоторые общие нестандартные средства sql
- •Типы date и time
- •Ibm Европейский
- •Ibm Европейский
- •Ibm usa Стандарт hh.Mm am/pm 9.04 pm
- •Типы текстовой строки
- •Математические функции
- •Символьные функции
- •Функции даты и времени
- •Автоматические
- •Приложение d синтаксис и команда ссылки
- •Функциональные элементы
- •Предикаты
- •Приложение e
Предикаты и исключенные поля
Похожая проблема, которую вы должны знать, включает в себя вставку строк в представление с предикатом, базирующемся на одном или более исключенных полей. Например, может показаться разумным, чтобы создать Londonstaff подобно этому:
CREATE VIEW Londonsta1t
AS SELECT snum, sname, comm
FROM Salespeople
WHERE city = 'London';
В конце концов, зачем включать значение city, если все значения city будут одинаковыми.
А как будет выглядит картинка получаемая всякий раз, когда мы пробуем вставить строку. Так как мы не можем указать значение city как значение по умолчанию, этим значением вероятно будет NULL, и оно будет введено в поле city ( NULL используется если другое значение по умолчанию значение не было определено. См. Главу 18 для подробностей ). Так как в этм случае поле city не будет равняться значению London, вставляемая строка будет исключена из представления.
Это будет верным для любой строки которую вы попробуете вставить в просмотр Londonstaff. Все они должны быть введены с помощью представления Londonstaff в таблицу Продавцов, и затем исключены из самого представления( если определением по умолчанию был не London, то это особый случай). Пользователь не сможет вводить строки в это представление, хотя все еще неизвестно, может ли он вводить строки в базовую таблицу. Даже если мы добавим WITH CHECK OPTION в опре-
деление представления
CREATE VIEW Londonstate
AS SELECT snum, sname, comm
FROM Salespeople
WHERE city = 'London'
WITH CHECK OPTION;
проблема не обязательно будет решена. В результате этого мы получим представление которое мы могли бы модифицировать или из которого мы могли бы удалять, но не вставлять в него. В некоторых случаях, это может быть хорошо; хотя возможно нет смысла пользователям имеющим доступ к этому представлению иметь возможность добавлять строки. Но вы должны точно определить что может произойти прежде, чем вы создадите такое представление.
Даже если это не всегда может обеспечить Вас полезной информацией, полезно включать в ваше представление все поля, на которые имеется ссылка в предикате. Если вы не хотите видеть эти поля в вашем выводе, вы всегда сможете исключить их из запроса в представлении, в противоположность запросу внутри представления. Другими словами, вы могли бы определить представление Londonstaff подобно этому:
CREATE VIEW Londonstaff
AS SELECT *
FROM Salespeople
WHERE city = 'London'
WITH CHECK OPTION;
Эта команда заполнит представление одинаковыми значениями в поле city, которые вы можете просто исключить из вывода с помощью запроса в котором указаны только те поля которые вы хотите видеть
SELECT snum, sname, comm
FROM Londonstaff;
Проверка представлений которые базируются на других представлениях
Еще одно надо упоминуть относительно предложения WITH CHECK OPTION в ANSI: оно не делает каскадированного изменения : Оно применяется только в представлениях в которых оно определено, но не в представлениях основанных на этом представлении. Например, в предыдущем примере
CREATE VIEW Highratings
AS SELECT cnum, rating
FROM Customers
WHERE rating = 300
WITH CHECK OPTION;
попытка вставить или модифицировать значение оценки не равное 300 потерпит неудачу. Однако, мы можем создать второе представление ( с идентичным содержанием ) основанное на первом:
CREATE VIEW Myratings
AS SELECT *
FROM Highratings;
Теперь мы можем модифицировать оценки не равные 300:
UPDATE Myratings
SET rating = 200
WHERE cnum = 2004;
Эта команда выполняемая так как если бы она выполнялась как первое представление, будет допустима. Предложение WITH CHECK OPTION просто гарантирует, что любая модификация в представлении, произведет значения, которые удовлетворяют предикату этого представления.
Модификация других представлений базирующихся на первом текущем, является все еще допустимой, если эти представления не защищены предложениями WITH CHECK OPTION внутри этих представлений. Даже если такие предложения установлены, они проверяют только те предикаты представлений в которых они содержатся. Так например, даже если представление Myratings создавалось следующим образом
CREATE VIEW Myratings
AS SELECT *
FROM Highratings
WITH CHECK OPTION;
проблема не будет решена. Предложение WITH CHECK OPTION будет исследовать только предикат представления Myratings. Пока у Myratings, фактически, не имеется никакого предиката, WITH CHECK OPTION ничего не будет делать. Если используется предикат, то он будет проверяться всякий раз, когда представление Myratings будет модифицироваться, но предикат Highratings все равно будет проигнорирован.
Это - дефект в стандарте ANSI, который у большинство программ исправлен. Вы можете попробовать использовать представление наподобии последнего примера и посмотреть избавлена ли ваша система от этого дефекта. ( Попытка выяснить это самостоятельно может быть иногда быть проще и яснее, чем поиск ответа в документации системы. )
============== РЕЗЮМЕ =================
Вы теперь овладели знаниями о представлениях полностью. Кроме правил определяющих, является ли данное представление модифицируемыми в SQL, вы познакомились с основными понятиями на которых эти правила базируются - т.е что модификации в представлениях допустимы только когда SQL может недвусмысленно определить, какие значения базовой таблицы можно изменять.
Это означает что команда модификации, при выполнении, не должна требовать ни изменений для многих строк сразу, ни сравнений между многочисленными строками либо базовой таблицы либо вывода запроса. Так как обьединения включают в себя сравнение строк, они также запрещены. Вы также поняли различие между некоторыми способами которые используют модификацируемые представления и представления
только_чтение.
Вы научились воспринимать модифицируемые представления как окна, отображающие данные одиночной таблицы, но необязательно исключающие или реорганизующие столбцы, посредством выбора только определенных строк отвечающих условию предиката.
Представления только_чтение, с другой стороны, могут содержать более допустимые запросы SQL; они могут следовательно стать способом хранения запросов, которые вам нужно часто выполнять в неизменной форме. Кроме того, наличие запроса чей вывод обрабатывается как объект данных, дает вам возможность иметь ясность и удобство при создании запросов в выводе запросов.
Вы теперь можете предохранять команды модификации в представлении от создания строк в базовой таблице, которые не представлены в самом представлении с помощью предложения WITH CHECK OPTION в определении представления. Вы можете также использовать WITH CHECK OPTION как один из способов ограничения в базовой таблице.
В автономных запросах, вы обычно используете один или более столбцов в предикате не представленых среди выбранных для вывода, что не вызывает никаких проблем. Но если эти запросы используются в модифицируемых представлениях, появляются проблемы, так как эти запросы производят представления, которые не могут иметь вставляемых в них строк.
Вы видели некоторые подходы к этим проблемам.
В Главах 20 И 21, мы говорили, что представления имеют прикладные программы защиты. Вы можете позволить пользователям обращаться к представлениям не разрешая в тоже время обращаться к таблицам в которых эти представления непосредственно находятся. Глава 22 будет исследовать вопросы доступа к объектам данных в SQL.