|
|||||
Объединение таблиц. Использование агрегатных функцийДата добавления: 2014-11-24 | Просмотров: 1583
Результатом выполнения предложения FROM является расширенное декартово произведение таблиц из списка предложения. Пример. Пусть надо поставить в соответствие каждому продавцу заказчиков, живущих в одном с ним городе. То есть необходимо для каждого продавца из таблицы Продавцы найти в таблице Заказчики всех заказчиков из того же города, в котором живет данный продавец. Это можно сделать следующим образом: SELECT Продавцы.Номер_продавца, Заказчики.Номер_заказчика, Продавцы .Город FROM Продавцы, Заказчики WHERE Продавцы Город. = Заказчики.Город; В этом случае выполняется операция объединения таблиц. Можно выполнять объединение таблицы с самой собой. При объединении таблицы с собой каждая строка таблицы комбинируется с собой и с каждой другой строкой таблицы. Затем каждая комбинация оценивается в терминах предиката, также как в объединениях различных таблиц. Объединение таблицы с собой можно изобразить как объединение двух копий одной и той же таблицы. Таблица на самом деле не копируется, но SQL выполняет команду так, как если бы это было сделано. Другими словами, это объединение - такое же, как и любое другое объединение между двумя таблицами, за исключением того, что в данном случае обе таблицы идентичны. Синтаксис команды для объединения таблицы с собой тот же, что и для объединения различных таблиц. Все повторяемые имена столбцов дополняются префиксами имени таблицы. Но так как таблица одна, то необходимо иметь два различных имени для такой таблицы. Это можно сделать заданием временных имен, называемыхпсевдонимами. Псевдонимы определяются в предложении FROM следующим образом: указывается имя таблицы и через пробел псевдоним для нее. Псевдонимы можно использовать уже в предложении SELECT, то есть еще до определения их в предложении FROM. Псевдоним существует только во время выполнения команды. Когда выполнение запроса заканчивается, псевдонимы, используемые в нем, становятся неопределенными. Пример. Найти все возможные пары заказчиков с одинаковым рейтингом: SELECT Первая.Фамилия_заказчика, Вторая.Фамилия_заказчика, Первая.Рейтинг FROM Заказчики Первая, Заказчики Вторая WHERE Первая.Рейтинг = Вторая.Рейтинг; Псевдонимы позволяют обработать таблицу Заказчики как две независимые таблицы Первая и Вторая. Результирующая таблица имеет два значения для каждой комбинации, причем второй раз в обратном порядке. Это потому, что каждое значение представлено и в первом псевдониме, и во втором ( симметрично) псевдониме. Следовательно, значение А в псевдониме! сначала выбирается в комбинации со значением В в псевдониме2, а затем значение В псевдониме! выбирается в комбинации со значением А в псевдониме2. Кроме того каждая строка была скомбинирована сама с собой, следовательно, будут получены строки типа А-А. Агрегатные функции предназначены для того, чтобы вычислять некоторое значение для заданного множества строк. Таким множеством строк может быть группа строк, если агрегатная функция применяется к сгруппированной таблице или вся таблица. В SQL определены пять стандартных агрегатных функций: COUNT -число строк или значений, МАХ - максимальное значение, MIN - минимальное значение, SUM - суммарное значение и AVG - среднее значение. Для всех агрегатных функций, кроме COUNT(*), фактический (т.е. требуемый семантикой) порядок вычислений следующий: на основании параметров агрегатной функции из заданного множества строк производится список значений. Затем по этому списку значений производится вычисление функции. Если список оказался пустым, то значение функции COUNT для него есть 0, а значение всех остальных функций NULL (не определено). С агрегатными функциями SUM и AVG могут использоваться только числовые поля. С COUNT, MAX и MIN - числовые и символьные поля. Когда эти функции используются с символьными полями, МАХ и MIN будут транслировать эти поля в эквивалент ASCII. Если агрегатная функция определена с ключевым словом DISTINCT, то список значений строится из значений столбца, указанного после этого слова (в этом случае не допускается вычисление арифметических выражений!). Далее из этого списка удаляются неопределенные значения, и в нем устраняются значения-дубликаты. Затем вычисляется указанная функция. Если агрегатная функция специфицирована без ключевого слова DISTINCT (или с ключевым словом ALL), то список значений формируется из значений арифметического выражения, указанного в качестве параметра агрегатной функции и вычисляемого для каждой строки заданного множества. Далее из списка удаляются неопределенные значения, и производится вычисление агрегатной функции. Пример. Определить среднюю сумму, заработанную сотрудниками фирмы SELECT AVG (Оклад + Премия ) FROM Сотрудник; Для каждой строки таблицы этот запрос будет складывать значения полей Оклад и Премия для соответствующего заказчика, а затем вычислять среднее значение. Для подсчета общего числа строк в таблице используется функция COUNT со звездочкой вместо имени поля, как в следующем примере SELECT COUNT (*) FROM Заказчики; |
При использовании материала ссылка на сайт Конспекта.Нет обязательна! (0.049 сек.) |