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