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

  • Построение вложенных подзапросов

  • Подзапросы, возвращающие единичное значение

  • Подзапросы, возвращающие множество значений

  • { ALL | SOME | ANY }

  • Ограничения целостности

  • Управление данными, синергия 3 семестр, шпаргалка, краткое содержание учебника. Управление данными 3 сем. Управление данными


    Скачать 0.55 Mb.
    НазваниеУправление данными
    АнкорУправление данными, синергия 3 семестр, шпаргалка, краткое содержание учебника
    Дата22.10.2022
    Размер0.55 Mb.
    Формат файлаdocx
    Имя файлаУправление данными 3 сем.docx
    ТипДокументы
    #748915
    страница5 из 11
    1   2   3   4   5   6   7   8   9   10   11

    Предложение HAVING (SELECT). При помощи HAVING отражаются все предварительно сгруппированные посредством GROUP BY блоки данных, удовлетворяющие заданным в HAVING условиям. Отличия от условий WHERE: HAVING вкл. из результирующего набора данных группы с результатами агрегированных значений, WHERE исключает из расчета агрегатных значений по группировке записи, не удовлетворяющие условию, в условии поиска WHERE нельзя задавать агрегатные функции.

    Пример (фирмы, у кот. общее кол-во сделок привысило три):

    SELECT Клиент.Фирма, Count(Сделка.Количество)

        AS Количество_сделок

    FROM Клиент INNER JOIN Сделка

        ON Клиент.КодКлиента=Сделка.КодКлиента

    GROUP BY Клиент.Фирма

    HAVING Count(Сделка.Количество)>3

    Построение вложенных подзапросов

    Внутренний подзапрос представляет собой также оператор SELECT, а кодирование его предложений подчиняется тем же правилам, что и основного оператора SELECT. Внешний оператор использует результат выполнения внутреннего для определения содержания окончательного результата всей операции. Внутренние запросы могут быть помещены после оператора сравнения (=<><=>=<>) в предложения WHERE и HAVING внешнего оператора – они получают названия подзапросов или вложенных запросов. Внутренние операторы SELECT могут применяться в операторах INSERT, UPDATE и DELETE.

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

    Правила и ограничния:

    - фраза ORDER BY не используется;

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

    - по умолчанию имена столбцов в подзапросе относятся к таблице, имя которой указано в предложении FROM. Допускается ссылка на столбцы таблицы, указанной во фразе FROM внешнего запроса, для чего применяются квалифицированные имена столбцов (с указанием таблицы);

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

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

    Подзапросы, возвращающие единичное значение.

    Пример (дата продажи с макс партией товара):

    SELECT Дата, Количество

    FROM Сделка

    WHERE Количество=(SELECT Max(Количество) FROM Сделка)

    Пример (даты сделок, превысивших по кол-ву товара среднее значение и превышение над средним для этих сделок):

    SELECT Дата, Количество,

    Количество-(SELECT Avg(Количество)

            FROM Сделка) AS Превышение

    FROM Сделка

    WHERE Количество>

        (SELECT Avg(Количество)

            FROM Сделка)

    Пример (даты, ког. среднее кол-во прод. за день товара > 20 ед.):

    SELECT Сделка.Дата, Avg(Сделка.Количество) AS

        Среднее_за_день

    FROM Сделка

    GROUP BY Сделка.Дата

    HAVING Avg(Сделка.Количество)>20

    Подзапросы, возвращающие множество значений.

    Вложенные подзапросы генерируют непоименованное промежуточное отношение, временную таблицу. Операции для подзапросов (применяемые ко множеству):

    1. { WHERE | HAVING } выражение [ NOT ] IN (подзапрос). Используется для сравнения некоторого значения со списком значений, проверяется, входит ли значение в предоставленный список или сравниваемое значение не является элементом представленного списка.

    Пример (список товаров, кот. имеются на складе):

    SELECT  Название

    FROM  Товар

    WHERE КодТовара In

        (SELECT КодТовара FROM Склад)

    Введение в запрос фразы “только” требует использования операции NOT IN.

    1. { WHERE | HAVING } выражение оператор_сравнения { ALL | SOME | ANY } (подзапрос). Возвращают один столбец чисел. ALL - для всех значений в результирующем столбце подзапроса. ANY - хотя бы для одного из значений в результирующем столбце подзапроса. Если в рез. подзапроса получ. пустое значение, то для ALL сравнение выполненно, для ANY - нет. SOME явл. синонимом ANY.

    Пример (клиенты, сов. сделки с макс кол-вом товаров):

    SELECT Клиент.Фамилия, Сделка.Количество

    FROM Клиент INNER JOIN Сделка

        ON Клиент.КодКлиента=Сделка.КодКлиента

    WHERE Сделка.Количество>=ALL(SELECT Количество

        FROM Сделка)

    Пример (фирма, кот. приоб. товаров на большую сумму):

    SELECT Клиент.Фамилия, Сделка.Количество

    FROM Клиент INNER JOIN Сделка

        ON Клиент.КодКлиента=Сделка.КодКлиента

    WHERE Сделка.Количество>=ALL(SELECT Количество

        FROM Сделка)

    1. {WHERE | HAVING } [ NOT ] EXISTS (подзапрос). Результат предст. логическое занчение TRUE или FALSE. Проверяется наличие строк (таблица может сод. произвольное кол-во столбцов). EXISTS (TRUE) - присутствует хотя бы одна строка. Для NOT EXISTS правила обработки обратные.

    Пример (список имеющихся на складе товаров):

    SELECT Название

    FROM Товар

    WHERE EXISTS (SELECT КодТовара

        FROM Склад

    WHERE Товар.КодТовара=Склад.КодТовара)
    Запросы модификации данных

    С помощью запросов действия можно добавить, удалить или обновить блоки данных. Позволяет оперировать не только отдельными строками, но и набором строк.

    Виды запросов действия:

    1. INSERT INTO - запрос добавления. Для добавления записей в таблицу.

    Формат оператора:

    <оператор_вставки>::=INSERT INTO <имя_таблицы>

        [(имя_столбца [,...n])]

        {VALUES (значение[,...n])|

        }

    VALUES - для вставки единственной строки в указанную таблицу. Список столбцов указывает столбцы, которым будут присвоены значения в добавляемых записях, список может быть опущен, тогда подразумеваются все столбцы таблицы. Если в INSERT указывается конкретный список имен полей, то любые пропущенные в нем столбцы должны быть объявлены при создании таблицы как допускающие значение NULL, за исключением описаниz столбца c исп. параметра DEFAULT. Список значений должен следующим образом соответствовать списку столбцов: количество элементов в обоих списках должно быть одинаковым; должно существовать прямое соответствие между позицией одного и того же элемента в обоих списках, поэтому первый элемент списка значений должен относиться к первому столбцу в списке столбцов и т.д.; типы данных элементов в списке значений должны быть совместимы с типами данных соответствующих столбцов таблицы.

    Пример (добавить в таблицу товар новую запись):

    INSERT INTO Товар (Название, Тип, Цена)

        VALUES(‘Славянский’, ‘шоколад’, 12)

    Если столбцы таблицы ТОВАР указаны в полном составе и в том порядке, в кот. они перечислены при ее создании, то оператор можно упростить:

    INSERT INTO Товар VALUES (‘Славянский’, ‘шоколад’, 12)

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

    1. DELETE - запрос удаления. Предназначен для удаления группы записей из таблицы.

    Формат оператора:

    <оператор_удаления> ::=DELETE

        FROM <имя_таблицы>[WHERE <условие_отбора>]

    Без WHERE удаляются все записи, но таблица остается.

    Пример (удалить все прошлогодние сделки):

    DELETE

    FROM Сделка

    WHERE Year(Сделка.Дата)=Year(GETDATE())-1

    1. UPDATE - запрос обновления. Для изменения значений в группе записей или в одной записи указанной таблицы.

    Формат оператора:

    <оператор_изменения> ::=

        UPDATE имя_таблицы SET имя_столбца=

            <выражение>[,...n]

        [WHERE <условие_отбора>]

    Пример (для товаров 1го сорта цена=140 и остаток=20):

    UPDATE Товар SET Товар.Цена=140, Товар.Остаток=20

    WHERE Товар.Сорт=« Первый «
    Чтобы инфомация в БД была однозначной и непротиворечивой, в реляционной модели устанавливаются ограничительные условия - правила, определяющие возможные значения данных и обеспечивающие логическую основу для поддержания корректных значений. Ограничения целостности позв. свести к минимуму ошибки, возник. при обновлении и обработке данных.

    Виды ограничений целостности:

    1. Обязательные данные (некот. поля не могут иметь пустого значения).

    2. Ограничения для доменов полей.

    3. Корпоративные ограничения.

    4. Целостность сущностей (в базовой таблице ни одно поле первичного ключа не может содержать отсутствующих значений, обозначенных NULL).

    5. Ссылочная целостность (если в таблице существует внешний ключ, то его значение должно либо соответствовать значению первичного ключа записи в базовой таблице, либо задаваться определителем NULL).

    Разновидности связи между таблицами БД: “один-ко-многим”, “один-к-одному”, “многие-ко-многим”. При вставке/обновлении строки дочерней таблицы для сохранения ссылочной целостности нужно убедиться, что значение внешнего ключа новой/обновленной строки дочерней таблицы равно пустому значению либо некоторому конкретному значению, присутствующему в поле первичного ключа одной из строк родительской таблицы. Ссылочная целостность будет нарушенной, если в дочерней таблице будут существовать строки, ссылающиеся на удаленную строку родительской таблицы, в этом случае может использоваться одна из следующих стратегий:

    NO ACTION. Удаление строки из родительской таблицы запрещается, если в дочерней таблице существует хотя бы одна ссылающаяся на нее строка.

    CASCADE. При удалении строки из родительской таблицы автоматически удаляются все ссылающиеся на нее строки дочерней таблицы (удаление строки родительской таблицы автоматически распространяется на любые дочерние таблицы).

    SET NULL. При удалении строки из родительской таблицы во всех ссылающихся на нее строках дочернего отношения в поле внешнего ключа, соответствующего первичному ключу удаленной строки, записывается пустое значение (только когда в поле внешнего ключа дочерней таблицы разрешается помещать пустые значения).

    SET DEFAULT. При удалении строки из родительской таблицы в поле внешнего ключа всех ссылающихся на нее строк дочерней таблицы автоматически помещается значение, указанное для этого поля как значение по умолчанию (только когда полю внешнего ключа дочерней таблицы назначено некоторое значение, принимаемое по умолчанию).

    NO CHECK. При удалении строки из родительской таблицы никаких действий по сохранению ссылочной целостности данных не предпринимается.

    Стратегии также можно использовать при обновлении первичного ключа в строке родительской таблицы.
    1   2   3   4   5   6   7   8   9   10   11


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