Объединение таблиц. Использование агрегатных функций


Дата добавления: 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 Заказчики;


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |

При использовании материала ссылка на сайт Конспекта.Нет обязательна! (0.049 сек.)