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

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

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

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

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

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

Table 1 ТаЫе_2

А

В

1

3

2

4

С

D

7

5

1

6

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

SELECT *

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

А

В

С

D

1

3

7

5

1

3

1

6

2

4

7

5

2

4

1

6

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

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

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

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

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

венстве значений, расположенных в связанных столбцах соеди­няемых таблиц, и записывается в предложении WHERE.

Для приведенных выше таблиц условием совмещения двух отношений может быть совпадение значений в полях А и С. За­прос на соединение таблиц ТаЫе_1 и ТаЫе_2 по равенству полей А и С будет иметь такой вид:

SELECT *

FROM Table_l, Table_2

WHERE A = C;

В этом случае результатом выполнения запроса будет сле­дующее отношение:

А

В

С

D

1

3

I

6

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

В подавляющем большинстве случаев связь между двумя таб­лицами строится на взаимоотношении первичных и внешних ключей. Первичный ключ (Primary Key) таблицы, как отмечалось ранее, используется для задания уникальности каждой ее строки. Та таблица, столбцы которой в таком взаимоотношении являются первичным ключом, называется родительской, а та, на которую столбец ссылается, - дочерней, или потомком. Общий столбец в дочерней таблице именуется внешним ключом (Foreign Key).

Рассмотрим несколько правил, которых необходимо придер­живаться при выполнении соединения двух отношений:

  • обе таблицы должны быть указаны в списке предложения FROM;

  • данные в столбцах соединяемых таблиц, по которым выпол­няется связь, должны быть логически связанными;

  • желательно, чтобы связанные столбцы таблиц имели одинако­вые имена;

  • если связанные столбцы содержат неопределенные значения, то строки, содержащие их, в соединение включаться не будут.

Перечислим также дополнительные рекомендации, которые помогут увеличить производительность системы при выполнении соединения:

  • при обработке таблиц с большим объемом информации жела­тельно, чтобы связанные столбцы были индексированы;

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

Можно выделить два типа синтаксиса, который применяется для описания операции соединения отношений:

  • с использованием предложений FROM и WHERE;

  • при помощи ключевого слова JOIN.