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

  • 3.4 Применение агрегатных функций и вложенных запросов в операторе выбора

  • 3.5 Внешние объединения

  • Тема 24 кур.р.Базы данных. Вид работы Курсовая работа Название дисциплины Базы данных Тема Структура языка sql фамилия студента Копаев Имя студента Андрей


    Скачать 355.5 Kb.
    НазваниеВид работы Курсовая работа Название дисциплины Базы данных Тема Структура языка sql фамилия студента Копаев Имя студента Андрей
    Дата28.01.2018
    Размер355.5 Kb.
    Формат файлаdoc
    Имя файлаТема 24 кур.р.Базы данных.doc
    ТипКурсовая
    #35311
    страница3 из 4
    1   2   3   4

    Использование объединения


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

    Если данные хранятся во многих таблицах, как их можно извлечь с помощью одного оператора SELECT? Ответ таков: посредством объединения данных. Проще говоря, объединение представляет собой механизм, используемый для объединения таблиц внутри оператора (отсюда термин "объединение"). Используя особый синтаксис, можно объединить несколько таблиц таким образом, что будет возвращаться один результат, и это объединение будет "на лету" связывать нужные строки из каждой таблицы.

    Важно понимать, что объединение не является "физическим объектом" — другими словами, оно не существует как реальная таблица в базе данных. Объединение создается СУБД в случае необходимости и сохраняется только на время выполнения запроса. Многие СУБД предлагают графический интерфейс, который может быть использован для интерактивного определения отношений таблицы. Эти инструменты могут оказаться чрезвычайно полезными для поддержания целостности ссылочных данных. При использовании реляционных таблиц важно, чтобы только достоверные данные содержались в реляционных столбцах.

    Создание объединения очень простая процедура. Нужно указать все таблицы, которые должны быть включены в объединение, а также "объяснить" СУБД, как они должны быть соотнесены между собой. Посмотрите на следующий пример:

    SELECT vand_name, prod_name, prod_price
    FROM Vendors, Products
    WHERE Vendors.vend_id = Products.vend_id; 

     vend_name          prod_name              prod_price
    -----------------  ---------------------  --------------------
    Doll House Inc.    Fish bean bag toy      3.4900
    Doll House Inc.    Bird bean bag toy      3 .4900
    Doll House Inc.     Rabbit bean bag toy    3.4900
    Bears R Us 8 inch  teddy bear             5.9900
    Bears R Us 12 inch teddy bear             8.9900
    Bears R Us 18 inch teddy bear             11.9900
    Doll House Inc.    Raggedy Ann            4.9900
    Fun and Games      King doll              9.4900
    Fun and Games      Queen doll             9.4900
    Рассмотрим представленный выше код. Оператор SELECT начинается с указания столбцов, которые должны быть выбраны. Существенная разница состоит в том, что два из указанных столбцов (prod_name и prod_price) находятся в одной таблице, а третий (vend_name) — в другой.

    Теперь посмотрим на предложение FROM. Оператор SELECT, содержит две таблицы, указанные в предложении FROM, Vendors и Products. Это имена двух таблиц, которые должны быть объединены в данном операторе SELECT.

    Таблицы корректно объединяются в предложении WHERE, которое указывает СУБД связывать идентификатор поставщика vend_id из таблицы Vendors со значением vend_id таблицы Products.

    Важно обратить внимание на то, что эти столбцы указаны как Vendors.vend_id и Products.vend_id. Такие полностью определенные имена необходимы здесь потому, что, если указать только vend_id, СУБД не сможет понять, на какие именно столбцы vend_id вы ссылаетесь. (Их два, по одному в каждой таблице). Как можно видеть из представленного результата, один оператор SELECT возвращает данные из двух разных таблиц.
     3.4 Применение агрегатных функций и вложенных запросов в операторе выбора

    Запросы могут производить обобщенное групповое значение полей точно также как и значение одного поля. Это делает с помощью агрегатных функций. Агрегатные функции производят одиночное значение для всей группы таблицы. Имеется список этих функций:

    • COUNT — возвращает количество значений в указанном столбце;

    • SUM — возвращает сумму значений в указанном столбце;

    • AVG — возвращает усредненное значение в указанном столбце;

    • MIN — возвращает минимальное значение в указанном столбце;

    • МАХ — возвращает максимальное значение в указанном столбце.

    Все эти функции оперируют со значениями в единственном столбце таблицы и возвращают единственное значение. Функции COUNT, MIN и МАХ применимы как к числовым, так и к нечисловым полям, тогда как функции SUM и AVG могут использоваться только в случае числовых полей. За исключением COUNT (*) , при вычислении результатов любых функций сначала исключаются все пустые значения, после чего требуемая операция применяется только к оставшимся непустым значениям столбца. Вариант COUNT (*) является особым случаем использования функции COUNT — его назначение состоит в подсчете всех строк в таблице, независимо от того, содержатся там пустые, повторяющиеся или любые другие значения.

    Если до применения агрегирующей функции необходимо исключить повторяющиеся значения, следует перед именем столбца в определении функции поместить ключевое слово DISTINCT. Стандарт ISO допускает использование ключевого слова ALL с целью явного указания того, что исключение повторяющихся значений не требуется, хотя это ключевое слово подразумевается по умолчанию, если никакие иные определители не заданы. Ключевое слово DISTINCT не имеет смысла для функций MIN и МАХ. Однако его использование может оказывать влияние на результаты выполнения функций SUM и AVG, поэтому следует заранее обдумать, должно ли оно присутствовать в каждом конкретном случае. Кроме того, ключевое слово DISTINCT в каждом запросе может быть указано не более одного раза. Следует отметить, что агрегирующие функции могут использоваться только в списке выборки SELECT и в конструкции HAVING. Во всех других случаях применение этих функций недопустимо. Если список выборки SELECT содержит агрегирующую функцию, а в тексте запроса отсутствует конструкция GROUP BY, обеспечивающая объединение данных в группы, то ни один из элементов списка выборки SELECT не может включать каких-либо ссылок на столбцы, за исключением случая, когда этот столбец используется как параметр агрегирующей функции. Например, следующий запрос является некорректным:

    SELECT staffNo, COUNT(salary)

    FROM Staff;

    Ошибка состоит в том, что в данном запросе отсутствует конструкция GROUP BY, а обращение к столбцу staffNo в списке выборки SELECT выполняется без применения агрегирующей функции.
    3.5 Внешние объединения

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

    • подсчета количества заказов каждого клиента, включая клиентов, которые еще не сделали заказ;

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

    • вычисления средних объемов продаж с учетом клиентов, которые еще не сделали заказ.

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


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