- •Язык запросов sql
- •Общие сведения
- •Insert - запрос на добавление;
- •Инструкция select
- •Синтаксис select
- •Расширения инструкции select в access
- •Порядок выполнения выборки
- •Управление списком выбора
- •Указание источника данных
- •Применение реляционных операторов
- •Применение булевых операторов
- •Обработка неопределенных значений
- •Сортировка данных
- •Вычисление агрегатных функций
- •Группировка данных
- •Ограничение для групп данных
- •Выборка из нескольких таблиц
- •Соединение отношений
- •Выборка из нескольких таблиц
- •Соединение отношений
- •Запрос с соединением, использующий from и where
- •Запрос с соединением join
- •Запрос с соединением, использующий from и where
- •Запрос с соединением join
- •Операции с таблицами
- •Изменение структуры таблицы
- •Удаление таблицы
- •Действия со строками
- •Вставка строк в таблицу
- •Изменение данных в таблице
- •Удаление данных из таблицы
- •Инструкция transform
- •In ("Физика", "Математика");
- •Глава 5 Работа с формами
Запрос с соединением, использующий from и where
Соединение отношений, которое описывается при помощи предложений FROM и WHERE, можно выполнить, используя следующий синтаксис:
SELECT selectionjist
FROM tablel [tablel_alias], table2 [table2_alias]
WHERE [tablel.]column_namel operator_comparison [ta- ble2.]column_namel
где operator_comparison - оператор сравнения, применяемый при соединении отношений (как правило, это знак равенства).
При записи равенства в предложении WHERE следует обращать внимание на то, как записываются имена связанных столбцов. Если связанные столбцы имеют разные имена, то их можно записывать и без указания имени таблицы. Однако для соблюдения однозначности и лучшей обработки команды системой лучше использовать следующую нотацию:
<Table_name>.<Column_name>
Например, выведем список групп студентов (таблица tbIGroups, поле fGroup) с указанием полного названия факультета для каждой из них (таблица tbIFaculties, поле fFacultyFull). Между этими таблицами существует связь посредством первичного и внешнего ключей. Для получения необходимой информации следует приравнять имена связанных столбцов, которые существуют в каждой из указанных таблиц: tbIFaculties.fIDFaculty - первичный ключ, tbIGroups.fIDFaculty - внешний ключ.
SELECT tbIFaculties.fFacultyFull, tbIGroups.fGroup
FROM tbIFaculties, tbIGroups
WHERE tbIFaculties.fIDFaculty = tbIGroups.fIDFaculty;
Для упрощения внешнего вида запроса, а также повышения его удобочитаемости многие СУБД, в том числе и Microsoft Access, поддерживают применение псевдонимов таблиц, указанных в предложении FROM. Эти псевдонимы в запросе могут подставляться везде, где необходимо использование имени таблицы.
Так, запрос, рассмотренный в предыдущем примере, можно представить в следующем виде:
SELECT f.fFacultyFull, g.fGroup
FROM tbIFaculties f, tbIGroups g
WHERE f.flDFaculty = g.flDFaculty;
Здесь каждой из объединяемых таблиц присваивается однобуквенный псевдоним: для таблицы tbIFaculties - f (от анлийского faculty - факультет), а для таблицы tbIGroups - g (от английского group - группа).
При соединении отношений в качестве оператора сравнения может использоваться не только знак равенства. Это значит, что в предложении WHERE можно указывать и другие условия соединения отношений, объединенные между собой логическими операторами. Применение нескольких условий позволит получить не полное соединение таблиц, а только интересующую информацию, что может значительно снизить нагрузку на систему.
Допустим, необходимо отобразить список групп только механического факультета. Для этого следует создать такой же запрос, как и для предыдущего примера, только в предложении WHERE, кроме соответствия связанных ключей, предусмотреть проверку еще одного условия: наименование факультета должно быть «Механический». Оба условия нужно связать логическим оператором AND.
Запрос записывается в следующем виде:
SELECT f.fFacultyFull, g.fGroup
FROM tbIFaculties f, tbIGroups g
WHERE f.flDFaculty = g.flDFaculty AND f.fFacultyFull =
'Механический';
В качестве условий могут также использоваться поля, не включенные в выборку. Например, отобразим список групп только первого курса (поле fCourse таблицы tbIGroups):
SELECT f.fFacultyFull, g.fGroup
FROM tbIFaculties f, tbIGroups g
WHERE f.flDFaculty = g.flDFaculty AND f.fCourse = 1;