Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ФОРМАТИРОВАНИЕ СВОДНОЙ ТАБЛИЦЫ.docx
Скачиваний:
8
Добавлен:
12.04.2015
Размер:
188.49 Кб
Скачать

Выборка из нескольких таблиц

При работе с нормализованной БД, которая состоит из множе­ства таблиц, выборка данных обычно производится из несколь­ких таблиц, так как одна таблица редко содержит всю интере­сующую пользователя информацию. При этом отдельные табли­цы, из которых состоит БД, совмещаются по правилу объедине­ния отношений. В результате пользователь получает новое отно­шение, которое включает все записи, входящие хотя бы в одно из объединяемых отношений. Благодаря этому при помощи опера­тора SELECT можно манипулировать данными, размещенными в разных таблицах, объединяя последние по своему усмотрению.

Соединение отношений

Оператор SELECT может содержать произвольное количество соединений. Для того чтобы выполнить соединение двух таблиц.

необходимо указать их в операторе FROM. В качестве примера рассмотрим объединение двух простых таблиц: ТаЫе_1 и ТаЫе_2, каждая из которых состоит из двух столбцов.

Table 1 Table 2

А

В

1

3

2

4

Если эти две таблицы объединить при помощи запроса SELECT *

FROM Table_l, Table_2; то результат будет представлен в виде следующего отношения:

А

В

С

D

1

3

7

5

1

3

1

6

2

4

7

5

2

4

1

6

Как видно, простое перечисление таблиц в операторе FROM соответствует реляционной операции декартова произведения. При этом в результирующем отношении каждая запись из одной таблицы (ТаЫе_1) будет сочетаться с каждой записью в другой (ТаЫе_2).

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

Как правило, каждое из соединений оператора SELECT осуще­ствляется при помощи двух столбцов, по одному из каждого объ­единяемого отношения. Такие столбцы называются связанными.

Примечание. Для соединения двух таблиц в операторе SELECT дол­жен присутствовать хотя бы один общий для них столбец.

Чтобы избежать произведения отношений, обычно указывает­ся условие их соединения. Обычно, это условие строится на ра-

FROM tbIGoods

WHERE fPriceGoods >= 600

GROUP BY fNameGoods;

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

SELECT fNameGoods AS Товар, COUNT(fModelGoods) AS

Моделей, SUM(fQuantityGoods) AS Единиц

FROM tbIGoods

WHERE fPriceGoods >= 600

GROUP BY fNameGoods *

HAVING SUM(fQuantityGoods) > 50;

На последнем этапе выполняется оператор сортировки полу­ченного результата по третьему полю (SUM(fQuantityGoods) AS Единиц) в порядке возрастания, т.е. добавляется предложение ORDER BY 3.

Можно сказать, что назначения оператора HAVING и оператора WHERE схожи. Но их главное отличие состоит в том, что условия в предложении WHERE не могут содержать группирующих выра­жений, в то время как оператор HAVING специально для этого предназначен.