- •Язык запросов sql
- •Общие сведения
- •Insert - запрос на добавление;
- •Инструкция select
- •Синтаксис select
- •Расширения инструкции select в access
- •Порядок выполнения выборки
- •Управление списком выбора
- •Указание источника данных
- •Применение реляционных операторов
- •Применение булевых операторов
- •Обработка неопределенных значений
- •Сортировка данных
- •Вычисление агрегатных функций
- •Группировка данных
- •Ограничение для групп данных
- •Выборка из нескольких таблиц
- •Соединение отношений
- •Выборка из нескольких таблиц
- •Соединение отношений
- •Запрос с соединением, использующий from и where
- •Запрос с соединением join
- •Запрос с соединением, использующий from и where
- •Запрос с соединением join
- •Операции с таблицами
- •Изменение структуры таблицы
- •Удаление таблицы
- •Действия со строками
- •Вставка строк в таблицу
- •Изменение данных в таблице
- •Удаление данных из таблицы
- •Инструкция transform
- •In ("Физика", "Математика");
- •Глава 5 Работа с формами
Выборка из нескольких таблиц
При работе с нормализованной БД, которая состоит из множества таблиц, выборка данных обычно производится из нескольких таблиц, так как одна таблица редко содержит всю интересующую пользователя информацию. При этом отдельные таблицы, из которых состоит БД, совмещаются по правилу объединения отношений. В результате пользователь получает новое отношение, которое включает все записи, входящие хотя бы в одно из объединяемых отношений. Благодаря этому при помощи оператора 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.