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

72) Оператор выборки

SELECT * FROM Cars WHERE Color = "чёрный"

Данный запрос выбирает из таблицы Cars машины черного цвета. Здесь выражение указанное после ключевого слова WHERE играет рольфильтра, который указывает какие строки нужно выбрать из таблицы. Такая фильтрация соответствует оператору выборки из алгебры Кодда.

Оператор проекции

SELECT Name, Color FROM Cars;

Данный запрос выбирает все строки из таблицы Cars, но в результате возвращаются только два поля (колонки) Name и Color, даже же если в таблице определены ещё какие-то поля. Такая выборка соответствует оператору проекции из алгебры Кодда.

Реляционное умножение

Самый простой пример многотабличного SQL-запроса:

SELECT * FROM A, B;

Этот запрос соединяет каждую строку из таблицы A с каждой строкой из таблицы B в одну строку, в которой будут все колонки из первой таблицы и все колонки из второй таблицы. И возвращает набор таких соединенных строк. Так, если в таблице A находиться N строк, а в таблицеB находиться M строк, то запрос вернет N * M строк. Приведенный запрос соответствует оператору реляционного умножения из реляционной теории.

Если в запросе будет три и более таблицы, то строки будут соединяться в тройки, четверки и т.д. по принципу каждая с каждой (или что проще представить: первая соединаяется со второй, потом с результатом соединяется третья и т.д.).

Оператор соединения

SELECT * FROM Comments, Users

WHERE Comments.user_id = Users.id

Этот запрос является комбинацией двух выше рассмотренных операторов — реляционного умножения и выборки. Сначала производиться умножение, а полученный результат фильтруется оператором выборки (выражение может быть произвольным, а не только равенство). Таким образом этот оператор выбирает пары (комментарий, пользователь), для которых выполняется указанное условие. Такой запрос соответствует оператору соединения из алгебры Кодда.

Допустим поле id таблицы Users содержит уникальный числовой идентификатор пользователя, поле user_id таблицы Comments содержит уникальный числовой идентификатор автора (т.е. пользователя из таблицы Users). Тогда описанный выше запрос можно интерпретировать следующим образом: выбрать все строки из таблицы Comments соединить их с соответствующими (указанному условию) строками из таблицыUsers, т.е. выбрать комментарии и информацию об авторах этих комментариев. Каждая строка результата будет содержать информацию о комментарии и о пользователе, который является автором комментария.

73) Триггерэто специальный тип хранимой процедуры, которая запускается автома­тически системой SQL Server при модифицировании какой-либо таблицы одним из трех операторов: UPDATE, INSERT или DELETE.

В отличие от других типов хранимых процедур триггеры запускаются автоматически при указан­ных модификациях данных; их нельзя запустить вручную по имени. Триггер создается по одной таблице базы данных, но он может осуществлять доступ и к другим таблицам и объектам других баз данных. Триггеры нельзя создать по временным таблицам или системным таблицам, а только по определенным пользователем таблицам или представлениям.

Существует пять типов триггеров: UPDATE, INSERT, DELETE, INSTEAD OF и AFTER. Триггер INSTEAD OF выполняется вместо операции вставки, обновления или удаления. Триггер AFTER активизируется пос­ле какой-либо запускающей операции и обеспечивает механизм управления поряд­ком выполнения нескольких триггеров.

Операции обновления, вставки и удаления называются событиями модифика­ции данных.

Синтаксис

CREATE TRIGGER [<Имя владельца>.]<Имя триггера>

ON [<Имя владельца>.]<Имя таблицы>

FOR { INSERT | UPDATE | DELETE [, ...]}

AS

<Команда>

CREATE TRIGGER Table_insert

ON spt_values

FOR INSERT

AS

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