Рефераты. Web-доступ к базам данных - (реферат)

p>Естественно, что для выявления продуктов, существующих в кладовой, следует дать запрос

    SELECT DISTINCT ПР
    FROM Наличие
    WHERE К_во IS NOT NULL;
    Использование условий
    столбец IS NULL и столбец IS NOT NULL
    вместо, например,
    столбец = NULL и столбец < NULL

связано с тем, что ничто – и даже само NULL-значение – не считается равным другому NULL-значению. (Несмотря на это, два неопределенных значения рассматриваются, однако, как дубликаты друг друга при исключении дубликатов, и предложение SELECT DISTINCT даст в результате не более одного NULL-значения. )

    Выборка с упорядочением

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

    SELECT Продукт, Белки, Жиры, Углев
    FROM Продукты
    ORDER BY Белки DESC;
    Продукт
    Белки
    Жиры
    Углев
    Судак
    Говядина
    Творог
    Яйца
    Кофе
    Мука

При включении в список ORDER BY нескольких столбцов СУБД сортирует строки результата по значениям первого столбца списка пока не появится несколько строк с одинаковыми значениями данных в этом столбце. Такие строки сортируются по значениям следующего столбца из списка ORDER BY и т. д. Например, выдать содержимое таблицы Блюда, отсортировав ее строки по видам блюд и основе:

    Результат:
    SELECT *
    FROM Блюда
    ORDER BY В Основа;
    БЛ
    Блюдо
    В
    Основа
    Выход
    Труд
    21
    Пудинг рисовый
    Г
    Крупа
    160.
    6
    20
    Каша рисовая
    Г
    Крупа
    210.
    4
    18
    Сырники
    Г
    Молоко
    220.
    4
    ... .
    16
    Драчена
    Г
    Яйца
    180.
    4
    28
    Крем творожный
    Д
    Молоко
    160.
    4
    ... .
    26
    Яблоки печеные
    Д
    Фрукты
    160.
    3
    7
    Сметана
    З
    Молоко
    140.
    1
    8
    Творог
    З
    Молоко
    140.
    2
    2
    Салат мясной
    З
    Мясо
    200.
    4
    6
    Мясо с гарниром
    З
    Мясо
    250.
    3
    1
    Салат летний
    З
    Овощи
    200.
    3
    ... .

Кроме того, в список ORDER BY можно включать не только имя столбца, а его порядковую позицию в перечне SELECT. Благодаря этому возможно упорядочение результатов на основе вычисляемых столбцов, не имеющих имен. Например, запрос

    SELECT Продукт, ((Белки+Углев)*4. 1+Жиры*9. 3)
    FROM Продукты
    ORDER BY 2;

позволит получить список продуктов, показанный на рис. 2. 3, в – переупорядоченный по возрастанию значений калорийности список рис. 2. 3, а.

    Агрегирование данных
    SQL-функции

В SQL существует ряд специальных стандартных функций (SQL-функций). Кроме специального случая COUNT(*) каждая из этих функций оперирует совокупностью значений столбца некоторой таблицы и создает единственное значение, определяемое так: COUNT

    число значений в столбце,
    SUM
    сумма значений в столбце,
    AVG
    среднее значение в столбце,
    MAX
    самое большое значение в столбце,
    MIN
    самое малое значение в столбце.

Для функций SUM и AVG рассматриваемый столбец должен содержать числовые значения. Следует отметить, что здесь столбец – это столбец виртуальной таблицы, в которой могут содержаться данные не только из столбца базовой таблицы, но и данные, полученные путем функционального преобразования и (или) связывания символами арифметических операций значений из одного или нескольких столбцов. При этом выражение, определяющее столбец такой таблицы, может быть сколь угодно сложным, но не должно содержать SQL-функций (вложенность SQL-функций не допускается). Однако из SQL-функций можно составлять любые выражения. Аргументу всех функций, кроме COUNT(*), может предшествовать ключевое слово DISTINCT (различный), указывающее, что избыточные дублирующие значения должны быть исключены перед тем, как будет применяться функция. Специальная же функция COUNT(*) служит для подсчета всех без исключения строк в таблице (включая дубликаты).

    Функции без использования фразы GROUP BY

Если не используется фраза GROUP BY, то в перечень элементов_SELECT можно включать лишь SQL-функции или выражения, содержащие такие функции. Другими словами, нельзя иметь в списке столбцы, не являющихся аргументами SQL-функций. Например, выдать данные о массе лука (ПР=10), проданного поставщиками, и указать количество этих поставщиков:

    Результат:
    SELECT SUM(К_во), COUNT(К_во)
    FROM Поставки
    WHERE ПР = 10;
    SUM(К_во)
    COUNT(К_во)
    220
    2

Если бы для вывода в результат еще и номера продукта был сформирован запрос

    SELECT ПР, SUM(К_во), COUNT(К_во)
    FROM Поставки
    WHERE ПР = 10;

то было бы получено сообщение об ошибке. Это связано с тем, что SQL-функция создает единственное значение из множества значений столбца-аргумента, а для “свободного” столбца должно быть выдано все множество его значений. Без специального указания (оно задается фразой GROUP BY) SQL не будет выяснять, одинаковы значения этого множества (как в данном примере, где ПР=10) или различны (как было бы при отсутствии WHERE фразы). Поэтому подобный запрос отвергается системой. Правда, никто не запрещает дать запрос

    SELECT 'Кол-во лука =', SUM(К_во), COUNT(К_во)
    FROM Поставки
    WHERE ПР = 10;
    Результат:
    'Кол-во лука ='
    SUM(К_во)
    COUNT(К_во)
    Кол-во лука =
    220
    2

Отметим также, что в столбце-аргументе перед применением любой функции, кроме COUNT(*), исключаются все неопределенные значения. Если оказывается, что аргумент – пустое множество, функция COUNT принимает значение 0, а остальные – NULL. Например, для получения суммы цен, средней цены, количества поставляемых продуктов и количества разных цен продуктов, проданных коопторгом УРОЖАЙ (ПС=5), а также для получения количества продуктов, которые могут поставляться этим коопторгом, можно дать запрос

    SELECT SUM(Цена), AVG(Цена), COUNT(Цена),
    COUNT(DISTINCT Цена), COUNT(*)
    FROM Поставки
    WHERE ПС = 5;
    и получить
    SUM(Цена)
    AVG(Цена)
    COUNT(Цена)
    COUNT(DISTINCT Цена)
    COUNT (*)
    6. 2
    1. 24
    5
    4
    7

В другом примере, где надо узнать “Сколько поставлено моркови и сколько поставщиков ее поставляют? ”:

    SELECT SUM(К_во), COUNT(К_во)
    FROM Поставки
    WHER ПР = 2;
    будет получен ответ:
    SUM(К_во)
    COUNT (К_во)
    -0
    0

Наконец, попробуем получить сумму массы поставленного лука с его средней ценой (“Сапоги с яичницей”):

    Результат:
    SELECT (SUM(К_во) +AVG(Цена))
    FROM Поставки
    WHERE ПР = 10;
    SUM(К_во)+AVG(Цена)
    220. 6
    Фраза GROUP BY

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

    SELECT ПР, SUM(К_во)
    FROM Поставки
    GROUP BY ПР;
    Результат показан на рис. 2. 5, а.
    а)
    б)
    в)
    г)
    ПР
    ПР
    9
    0
    0
    11
    150
    150
    12
    30
    30
    15
    370
    70
    1
    370
    370
    3
    250
    250
    5
    170
    70
    6
    220
    140
    8
    150
    150
    7
    200
    200
    2
    0
    0
    4
    100
    100
    13
    190
    190
    14
    70
    70
    16
    250
    250
    17
    50
    50
    10
    220
    220
    Рисунок 2. 4

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.