Главная страница
Навигация по странице:

  • Операция разности Операция разности реализуется аналогично операции пересечения с заменой ключевого слова in на not in:R1( Ключ , A, B, C), R2( Ключ

  • , A, B, C) select * from R1 where Ключ not in (select Ключ from R2)

  • Операция декартова произведения Операция декартова произведения реализуется с помощью операции перекрестного соединения cross join:select *

  • Операции внутреннего соединения.

  • Операция естественного соединения

  • R1(A, B, C), R2(B, C, D) select A, R1.B, R1.C, D from R1 inner join R2 on R1.B = R2.B and R1.C = R2.C

  • Операция левого внешнего соединения.

  • Операция правого внешнего соединения.

  • Операция полного внешнего соединения.

  • Эволюция систем баз данных


    Скачать 236.08 Kb.
    НазваниеЭволюция систем баз данных
    Дата24.02.2022
    Размер236.08 Kb.
    Формат файлаdocx
    Имя файла15.docx
    ТипДокументы
    #372046
    страница4 из 4
    1   2   3   4

    Операция объединения

    Операция объединения реализуется с помощью операции union, применяемой к базовым операторам select:

    select список_имен_атрибутов_отношения_1

    from имя_отношения_1

    union [all]

    select список_имен_атрибутов_отношения_2

    from имя_отношения_2

    Списки имен атрибутов объединяемых отношений должны ссылаться на атрибуты совместимых типов и быть перечислены в согласованном порядке. Имена атрибутов в отношениях могут быть различными. Результирующему отношению приписываются имена атрибутов, указанные в первом операторе select. Операция объединения может иметь форму union all с опцией all (все). В этом случае из результирующего отношения дубликаты кортежей не удаляются (что является более предпочтительным с точки зрения производительности).

    Операция пересечения

    Операция пересечения проще всего реализуется с использованием ключей отношений:

    R1(Ключ, A, B, C), R2(Ключ, A, B, C)

    select *

    from R1

    where Ключ in (select Ключ from R2)

    Здесь R1 и R2 – имена отношений. Оператор select в скобках является так называемым подзапросом. Он возвращает список значений ключа отношения R2. Согласно условию выборки в результирующее отношение выбираются те кортежи отношения R1, ключ которых содержится в списке ключей отношения R2. Имена ключей отношений могли бы быть и различными. Сами отношения могли бы иметь различные наборы дополнительных атрибутов.

    Операция разности

    Операция разности реализуется аналогично операции пересечения с заменой ключевого слова in на not in:

    R1(Ключ, A, B, C), R2(Ключ, A, B, C)

    select *

    from R1

    where Ключ not in (select Ключ from R2)

    В результирующее отношение выбираются те кортежи отношения R1, ключ которых не содержится в списке ключей отношения R2.

    Если рассматривать запись буквально, то действительно получается, что из отношения R1 «вычли» отношение R2. Отсюда делаем вывод, что условие выборки в этом операторе записано верно (ведь определение разности двух отношений выполняется) и использование ключей, как и в случае реализации операции пересечения, полностью оправдано.

     

    Операция декартова произведения

    Операция декартова произведения реализуется с помощью операции перекрестного соединения cross join:

    select *

    from R1 cross join R2

    Здесь предполагается, что отношения не имеют совпадающих имен атрибутов.

    Но если эти отношения все же имеют одинаковые имена, сложившуюся ситуацию можно легко разрешить с помощью операции переименования атрибутов, т. е. в подобных случаях необходимо просто использовать опцию as, например:

    R1(A, B), R2(B, C)

    select A, R1.B as B1, R2.B as B2, C

    from R1 cross join R2

    Здесь ссылки на атрибуты B отношений R1 и R2 производятся по их уточненным именам R1.B и R2.B соответственно.

     

    Операции внутреннего соединения.

    Для реализации операции внутреннего соединения в языке структурированных запросов существует специальная опция inner join, которая и переводится с английского буквально «внутреннее объединения» или «внутреннее соединение».

    Оператор Select в случае осуществления операции внутреннего соединения будет выглядеть следующим образом:

     

    Select *

    From R1 inner join R2;

     

    Здесь, как и раньше, R1 и R2 – имена исходных отношений-операндов.

    При реализации этой операции нельзя допускать пересечения схем отношений-операндов.

     

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

    Операция естественного соединения является частным случаем операции внутреннего соединения inner join по условию равенства кортежей на пересечении схем отношений, например:

    R1(A, B, C), R2(B, C, D)

    select A, R1.B, R1.C, D

    from R1 inner join R2 on R1.B = R2.B and R1.C = R2.C

    Здесь ссылаться на общие атрибуты B и C просто по именам нельзя, так как будет неясно, к какому отношению они относятся. Использованная формулировка условия соединения (после ключевого слова on) предполагает, что общие атрибуты соединяемых отношений null-значений не допускают.

     

    Операция левого внешнего соединения.

    Выражение на языке структурированных запросов SQL операции левого внешнего соединения получается из реализации операции естественного соединения заменой ключевого слова inner на ключевое слово left outer.

    Таким образом, на языке структурированных запросов эта операция запишется следующим образом:

    Select *

    From имя отношения 1 left outer join имя отношения 2

    on условие равенства кортежей;

     

    Операция правого внешнего соединения.

    Выражение для операции правого внешнего соединения на языке структурированных запросов получается из осуществления операции естественного соединения заменой ключевого слова inner на ключевое слово right outer.

    Итак, получаем, что на языке структурированных запросов SQL операция правого внешнего соединения запишется следующим образом:

    Select *

    From имя отношения 1 right outer join имя отношения 2

    on условие равенства кортежей;

     

    Операция полного внешнего соединения.

    Выражение на языке структурированных запросов операции полного внешнего соединения получается, как и в двух предыдущих случаях, из выражения для операции естественного соединения путем замены ключевого слова inner на ключевое слово full outer.

    Таким образом, на языке структурированных запросов эта операция запишется так:

    Select *

    From имя отношения 1 full outer join имя отношения 2

    on условие равенства кортежей;

    Очень удобно, что в семантику языка структурированных запросов SQL изначально встроены эти опции, ведь иначе каждому программисту приходилось бы выводить их самостоятельно и вводить в каждую новую базу данных.

    14. Целостность при переходах.

    Главная особенность SQL-технологий наличие у сервера СУБД специальных средств контроля целостности данных, не зависящих от клиентских программ и привязанных непосредственно к таблицам.

    К структурам контроля целостности данных относятся ограничители (constraint), которые привязаны к столбцам и триггеры (trigger), которые могут быть привязаны как к столбцам, так и к строкам в таблице.

    Ограничители - это элементарные проверки или условия, которые выполняются для операций вставки и модификации значения столбца. Если данная проверка не проходит или условие не выполняется, то вставка или модификация отменяется, а в программу клиента передается ошибка.

    SQL-серверы, как правило, поддерживают следующие ограничители.

    NOT NULL - проверка на непустое значение. "Пусто" и "0(ноль)" не равны друг другу!

    UNIQUE - проверка на уникальность. Вставляемое значение должно быть уникально для данного столбца по всей таблице. Может содержать пустые значения.

    PRIMARY KEY - первичный ключ. Значение в столбце считается первичным ключом, если оно непустое и уникально в пределах столбца данной таблицы. Первичный ключ может быть составным и представлять собой комбинацию столбцов.

    15. Триггеры

    Триггеры являются одной из разновидностей хранимых процедур. Хранимые процедуры представляют собой группу команд SQL, объединенных в один модуль. Такая группа команд компилируется и выполняется как единое целое. Хранимая процедура является объектом базы данных.

    Однако вызов триггеров, в отличие от вызовов хранимых процедур, не производится явно. Триггеры вызываются автоматически при выполнении над таблицей какой-либо операции модификации (вставки, обновления или удаления строки). Триггеры используются для контроля целостности данных, а также для отката транзакций.

    Триггер – это откомпилированная SQL-процедура, исполнение которой обусловлено наступлением определенных событий внутри реляционной базы данных. Применение триггеров большей частью весьма удобно для пользователей базы данных. И все же их использование часто связано с дополнительными затратами ресурсов на операции ввода/вывода. В том случае, когда тех же результатов (с гораздо меньшими непроизводительными затратами ресурсов) можно добиться с помощью хранимых процедур или прикладных программ, применение триггеров нецелесообразно.

    Триггеры – особый инструмент SQL-сервера, используемый для поддержания целостности данных в базе данных. С помощью ограничений целостности, правил и значений по умолчанию не всегда можно добиться нужного уровня функциональности. Часто требуется реализовать сложные алгоритмы проверки данных, гарантирующие их достоверность и реальность. Кроме того, иногда необходимо отслеживать изменения значений таблицы, чтобы нужным образом изменить связанные данные.

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

    Создает триггер только владелец базы данных. Это ограничение позволяет избежать случайного изменения структуры таблиц, способов связи с ними других объектов и т.п.

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

    В отличие от обычной процедуры, триггер выполняется неявно в каждом случае возникновения триггерного события; к тому же он не имеет аргументов. Приведение его в действие иногда называют запуском триггера.

    С помощью триггеров достигаются следующие цели:

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

    • выдача предупреждений, напоминающих о необходимости выполнения некоторых действий при обновлении таблицы;• накопление аудиторской информации посредством фиксации сведений о внесенных изменениях и тех лицах, которые их выполнили;

    • поддержка репликации.

    Основной формат команды CREATE TRIGGER показан ниже:

     

    CREATE TRIGGER имя_триггера

    {BEFORE | AFTER} триггерное_событие

    ON имя_таблицы

    [REFERENCING список_старых_или_новых_псевдонимов]

    [FOR EACH {ROW | STATEMENT}]

    [WHEN(условие_триггера)]

    тело_триггера

    1   2   3   4


    написать администратору сайта