- •5Я нормальная форма.
- •Disk init
- •39. Язык sql. Функции языка. Достоинства языка.
- •Концептуальное проектирование базы данных. Объекты. Атрибуты. Конкретизация и обобщение.
- •17. Концептуальное проектирование базы данных. Связи между объектами. Мощность связи.
- •Концептуальное проектирование базы данных. Составные объекты.
- •Жизненный цикл баз данных. Этап реализации.
- •22)Разработка приложений. Тестирование, эксплуатация и сопровождение.
- •- Анализ функционирования и поддержка исходного варианта бд
- •- Адаптация и модернизация системы
- •46) Disk init
- •72) Оператор выборки
- •Оператор проекции
- •Реляционное умножение
- •Оператор соединения
- •Insert into spt_values(number, status)
- •Values (Null,Null)
- •Inner join [Медицинское учреждение].[dbo].[отделение]
- •Inner join Orders о
- •90) Ограничения домена
- •95) Табличные блокировки
Insert into spt_values(number, status)
Values (Null,Null)
Необходимо учитывать, что есть команды, которые нельзя использовать в триггерах:
все команды CREATE применительно к объектам DATABASE, TABLE, INDEX, PROCEDURE, DEFAULT, RULE, TRIGGER и VIEW;
все команды DROP;
ALTER TABLE и ALTER DATABASE;
TRUNCATE TABLE;
GRANT и REVOKE;
UPDATE STATISTICS;
RECONFIGURE;
LOAD DATABASE и LOAD TRANSACTION;
все команды DISK;
SELECT INTO (из-за того, что она создает таблицу).
74) Соединение - последний из трех операторов (выборка, проецирование и соединение), которые должен поддерживать любой язык реляционных запросов. С помощью операции соединения в одном операторе SELECT можно манипулировать данными из разных таблиц.
В число этих конструкций входят следующие:
INNER JOIN—внутреннее соединение.
OUTER JOIN— внешнее соединение, как левое (LEFT), так и правое (RIGHT).
FULL JOIN— полное соединение.
CROSS JOIN—перекрестное соединение.
Но все разности конструкций JOIN имеют одну общую отличительную особенность в том, что в них одна строка согласуется с одной или несколькими другими строками для получения результирующей строки, представляющей собой надмножество, созданное путем соединения нолей из нескольких записей.
75) SELECT <select list>
FROM <first_table>
<join_type> <second_table>
[ON <join_condition>]
SELECT [ФИО],[Должность]
FROM [Медицинское учреждение].[dbo].[врач]
Inner join [Медицинское учреждение].[dbo].[отделение]
ON [код врача]=[код врача]
Отличительная особенность INNER JOIN состоит в том, что она возвращает только те строки, которые были согласованны по всем полям.
INNER JOIN отличается от конструкций JOIN тем, что с ее помощью можно создавать исключительное соединение, т.е. соединение, в котором исключены все строки, не имеющие определенного значения в обеих таблицах.
Например, требуется выполнить запрос, позволяющий отобрать информацию обо всех заказчиках, заказы которых выполняются в настоящее время.
SELECT DISTINCT с.CustomerID, с.CompanyName
FROM Customers с
Inner join Orders о
ON c.CustomerID = o.CustomerlD
Если бы в этом запросе отсутствовало ключевое слово DISTINCT, то была бы возвращена отдельная строка, относящаяся к каждому заказчику для каждой строки из таблицы Orders, в которой имеется информация об этом заказчике.
Применение конструкции INNER JOIN приводит к исключению строк в связи с тем, что не обнаруживаются соответствующие им строки в другой таблице, а использование конструкции WHERE приводит к исключению строк из возвращаемого набора, поскольку эти строки не соответствуют сданным критериям.
76)
77)
78) Связующей таблицей (таблицей ассоциации, таблицей слияния) называют любую таблицу, основным назначением которой является не хранение собственных данных, а создание связей между данными, хранимыми в других таблицах.
Такие таблицы можно рассматривать как средства "обеспечения взаимодействие", или "создания связей" между двумя или несколькими таблицами. В частности, связующие таблицы позволяют найти выход в такой часто складывающейся ситуации, когда имеет место так называемая связь "многие ко многим" между таблицами. В такой ситуации две таблицы содержат связанные друг с другом данные, причем и в той и другой таблице может находиться большое количество строк, которые согласуются со многими строками в другой таблице.
СУБД SQL Server не позволяет непосредственно реализовывать подобные связи, поэтому применяются связующие таблицы, позволяющие разделить связь "многие ко многим" на две связи "один ко многим", а последние поддерживаются СУБД SQL Server.
79) В конструкции OUTER существует возможность включить в результирующий набор строки, которые соответствуют хотя бы одному из заданных критериев
SELECT <SELECT list>
FROM <the table you want to be the "LEFT" table>
<LEFT|RIGHT> [OUTER] JOIN <table you want to be the "RIGHT" table> ON <join condition>
Следует отметить, что ключевое слово OUTER является необязательным, достаточно лишь включить ключевое слово LEFT или RIGHT. Таблица, имя которой упоминается перед ключевым словом JOIN, рассматривается как левая таблица, LEFT, а таблица, имя которой следует за ключевым словом JOIN, — как правая таблица, RIGHT.
При использовании конструкции LEFT OUTER JOIN включается вся информация из таблицы, указанной слева ОТ ключевого слова JOIN, а при использовании конструкции RIGHT OUTER JOIN— вся информация из таблицы, указанной справа от этого ключевого слова.
SELECT [ФИО],[Должность]
FROM [Медицинское учреждение].[dbo].[отделение]
LEFT OUTER JOIN [Медицинское учреждение].[dbo].[врач]
ON [код врача]=[код врача]
80) FULL JOIN эта конструкция согласует данные в таблицах, имена которых находятся по обе стороны от ключевого слова JOIN, и вводит в окончательные результаты все строки, независимо от того, с какой стороны соединения они определены.
SELECT [ФИО],[Должность]
FROM [Медицинское учреждение].[dbo].[врач]
FULL JOIN [Медицинское учреждение].[dbo].[отделение]
ON [КОД ВРАЧА]=[код врача]
81) CROSS JOIN отличаются от соединений других типов тем, что в них отсутствуют операции ON, а также тем, что в них происходит соединение каждой строки таблиц, находящихся с одной стороны от ключевого слова JOIN, с каждой строкой таблиц, находящихся с другой стороны от ключевого слова JOIN. Короче говоря, в конечном итоге формируется декартово произведение всех строк, заданных по обе стороны от ключевого слова JOIN.
SELECT [ФИО],[Должность]
FROM [Медицинское учреждение].[dbo].[врач]
CROSS JOIN [Медицинское учреждение].[dbo].[отделение]
82) В ряде приложений возникает необходимость одновременной обработки данных какой-либо таблицы и одной или нескольких ее копий, создаваемых на время выполнения запроса.
Например, при создании списков студентов (таблица Студенты) возможен повторный ввод данных о каком-либо студенте с присвоением ему второго номера зачетной книжки. Для выявления таких ошибок можно соединить таблицу Студенты с ее временной копией, установив в WHERE фразе равенство значений всех одноименных столбцов этих таблиц кроме столбцов с номером зачетной книжки (для последних надо установить условие неравенства значений).
Временную копию таблицы можно сформировать, указав имя псевдонима за именем таблицы во фразе FROM. Так, с помощью фразы
FROM Блюда X, Блюда Y, Блюда Z
будут сформированы три копии таблицы Блюда с именами X, Y и Z.
В качестве примера соединения таблицы с ней самой сформируем запрос на вывод таких пар блюд таблицы Блюда, в которых совпадает основа, а название первого блюда пары меньше (по алфавиту), чем номер второго блюда пары. Для этого можно создать запрос с одной копией таблицы Блюда (Копия):
SELECT Блюдо, Копия.Блюдо, Основа
FROM Блюда, Блюда Копия
WHERE Основа = Копия.Основа
AND Блюдо < Копия.Блюдо;
или двумя ее копиями (Первая и Вторая):
SELECT Первая.Блюдо, Вторая.Блюдо, Основа
FROM Блюда Первая, Блюда Вторая
WHERE Первая.Основа = Вторая.Основа
AND Первая.Блюдо < Вторая.Блюдо;
83) Представление – виртуальный объект в базе данных.
Позволяют достичь следующих целей:
Сократить кажущуюся сложность базы данных для конечных пользователей.
Обеспечить доступ пользователей ко всем необходимым данным и вместе с тем запретить доступ к некоторым столбцам, к которым доступ обычных пользователей нежелателен.
Предусмотреть в базе дополнительные средства индексации, повышающие производительность всей базы.
CREATE VIEW <название_представления>
AS
SELECT <описание_оператора…>
84) Простейшеее представление, которое будет выводить все имена, фамилия и отчества всех студентов:
CREATE VIEW FIOStud_vw
AS
SELECT StudentFirstName, StudentLastName, StudentPatronymic
FROM Students
GO
Теперь проверим полученный результат, путём выборки всей информации из созданного представления:
USE Universitet
SELECT *
FROM FIOStud_vw
GO
85) С функциональной возможности использование представлений почти полностью аналогично таблицам. К ним так же можно применять операторы INSERT, UPDATE и DELETE. Однако при их использовании следует учитывать, что если в представлении используется оператор JOIN, то обязательно использование ключевого слова INSTEAD OF, для указания вместо каких столбцов следует вносить новые значения.
Для внесения изменений в существующие представления можно использовать ALTER VIEW - для редактирования; CREATE VIEW – для создания новых представлений; DROP VIEW – для удаления представлений.
Изменения, которые производятся с помощью представлений, могут воздействовать только на один объект.
Если в запросе, который используется для создания представления, присутствуют выражения, встроенные функции или функции агрегирования, то изменить данные вы не сможете. Что вполне логично, так как нет столбцов в исходных таблицах, связанных со столбцами в представлении.
Если представление ссылается на таблицы, которые были удалены, то при запуске представления вы получите сообщение об ошибке
Запись не может быть добавлена в представление, если столбцы, которые не входят в представление, не принимают значение NULL или не имеют значения по умолчанию.
Если создать представление с помощью выражения SELECT *, а затем поменять структуру исходных таблиц, новые столбцы не появятся в представлении. То есть (на более низком уровне) звездочка интерпретируется как названия столбцов только во время создания представления. Единственный выход – удалить представление и создать его заново. Для представлений нет команд изменения структуры. Если вы вынуждены поменять список полей и выражений, отображаемых с помощью представления, то удалите его и создайте заново.
86) Создание и редактирование представлений в программе Management Studio.
Чтобы посмотреть запросы необходимо открыть подузел Universitet узла Databases и щёлкнуть правой кнопкой мыши на обозначении Views.
Теперь выберите команду New View, чтобы открыть новое диалоговое окно. Это диалоговое окно позволяет выбирать таблицы, которые должны быть включены в представление. Выберем несколько таблиц удерживая клавишу CTRL.
Затем щёлкните на кнопке Add, чтобы СУБД добавила несколько таблиц к представлению. И понаблюдайте за тем, как открывается окно редактора
В окне редактора можно увидеть несколько независимых окон:
Окно Diagrams.
Окно Criteria(Grid)
И окно SQL
87) Хранимая процедура — это специальный вид процедуры, который выполняется сервером баз данных. Хранимые процедуры пишутся на процедурном языке, который зависит от конкретной СУБД. Они могут вызывать друг друга, читать и изменять данные в таблицах, и их можно вызвать из клиентского приложения, работающего с базой данных.
Хранимые процедуры обычно используются при выполнении часто встречающихся задач
Хранимые процедуры – это откомпилированные SQL-инструкции, которые хранятся на сервере.
В процессе работы многие системные хранимые процедуры необходимы как быстрое средство манипулирования информацией из системных таблиц. Многие задачи администрирования SQL Server выполняются с помощью этих заранее определенных системных процедур. По умолчанию системная хранимая процедура начинается с префикса sp_. Для создания своих собственных системных хранимых процедур используйте тот же префикс. Системные процедуры могут исполняться в любой базе данных.
88) Для прямого доступа к системным ресурсам Windows NT в SQL Server встроены специальные средства – расширенные хранимые процедуры (extended stored procedure). Они позволяют обращаться к функциям, написанным в виде динамических библиотек Windows – DLL, что существенно повышает скорость их выполнения. Расширенные хранимые процедуры отличаются тем, что их имя начинается с символов хр_.
Процедуры можно создавать только в текущей базе данных
Команда CREATE PROCEDURE не может смешиваться с другими SQL-командами в одном пакете
Локальные и глобальные временные хранимые процедуры похожи на временные таблицы. Для того чтобы процедура стала временной, необходимо добавить знак # перед ее именем (локальная процедура) или два знака # (глобальная процедура).
CREATE PROCEDURE <название_процедуры>
AS
<Код_процедуры, например (SELECT <описание_оператора…>)>
Пример, возвращающий все поля таблицы базы данных:
USE Universitet
GO
CREATE PROCEDURE spStudents
AS
SELECT * FROM Students
89)