Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры о бд.docx
Скачиваний:
7
Добавлен:
23.09.2019
Размер:
461.01 Кб
Скачать

Insert into spt_values(number, status)

Values (Null,Null)

Необходимо учитывать, что есть команды, которые нельзя использовать в триггерах:

  1. все команды CREATE применительно к объектам DATABASE, TABLE, INDEX, PROCEDURE, DEFAULT, RULE, TRIGGER и VIEW;

  2. все команды DROP;

  3. ALTER TABLE и ALTER DATABASE;

  4. TRUNCATE TABLE;

  5. GRANT и REVOKE;

  6. UPDATE STATISTICS;

  7. RECONFIGURE;

  8. LOAD DATABASE и LOAD TRANSACTION;

  9. все команды DISK;

  10. 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)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]