Организация Web-доступа к базам данных с использованием SQL-запросовРефераты >> Программирование и компьютеры >> Организация Web-доступа к базам данных с использованием SQL-запросов
При включении в список 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
7. число значений в столбце,
SUM
8. сумма значений в столбце,
AVG
9. среднее значение в столбце,
MAX
10. самое большое значение в столбце,
MIN
11. самое малое значение в столбце.
Для функций 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 |