В сложных запросах можно объединять не только разные таблицы, но и копии одной таблицы. Например, если необходимо найти все пары продавцов, которые имеют одинаковые комиссионные. Для этого с помощью Конструктора создадим запрос как показано на рис. 36. Здесь таблица Salespeople выбрана два раза, поэтому в зоне таблиц находится таблица Salespeople и ее копия Salespeople_1.
Рис. 36.Пример запроса над таблицей Salespeople и ее копией (Salespeople_1).
WHERE (((Salespeople_1.comm)=[Salespeople].[comm])
Имя второй таблицы и ее синоним (Salespeople AS Salespeople_1) содержится в строке с ключевым словом FROM.
Результат этого запроса будет содержать все комбинации пар фамилий, которые имею одинаковый рейтинг, в том числе и строки с идентичными фамилиями (см. рис.37).
Рис.37. Результат запроса с двумя таблицами Salespeople.
Исключить строки с одинаковыми значениями в первом и втором столбцах можно, добавив через логическую связку AND условие типа: Salespeople_1.snum < Salespeople.snum (т.е. «номер продавца в первой таблице должен быть строго меньше номера во второй таблице»). Это позволит исключить строки типа «Веселов=Веселов». В этом случае полный запрос будет выглядеть как показано ниже:
WHERE (((Salespeople_1.comm) = [Salespeople].[comm])
AND ((Salespeople_1.snum) < [Salespeople].[snum]));
Результат запроса с дополнительным условием показан на рис.38. Здесь отобрана только одна строка, в которой продавец «Трофимов» имеет комиссионные такие же как и продавец «Змеев», что полностью соответствует поставленному вопросу.
Рис.38. Результат отбора строк с дополнительным условием (Salespeople_1.snum < Salespeople.snum);
Следует отметить, что конструктор QBE, строит синонимы таблиц по упрощенному алгоритму. В общем случает можно использовать любые синонимы для выбранных таблиц. Вот как будет выглядеть тот же запрос, если мы для первой таблицы Salespeople будем использовать букву A, а для второй таблицы Salespeople - ,букву B:
SELECT A.sname, B.sname, B.comm
FROM Salespeople AS A, Salespeople AS B
WHERE B.comm = A.comm AND B.snum < A.snum;
Результат запроса с синонимами таблиц показан на рис.38.
Таким образом, вводя в SQL запросах синонимы исходным таблицам базы данных, пользователь может существенно расширить возможности при построении сложных запросов над одной или несколькими таблицами.