|
Программирование >> Построение запросов sql
Такой же результат может быть получен, если использовать следующий запрос на явное соединение: SELECT Abonent.*, Street.* FROM Abonent JOIN Street ON Abonent.StreetCD = Street.StreetCD;. 3.3.1.3.3. Естественное соединение таблиц Для получения естественного соединения таблиц необходимо в эквисоединении таблиц исключить дубликаты повторяющихся столбцов (столбцов, входящих в условие соединения). Для предыдущего примера естественное соединение таблиц Abonent и Street по столбцу StreetCD выглядит следующим образом: SELECT AccountCD, Street.StreetCD, StreetNM, HouseNo, FlatNo, Fio, Phone FROM Abonent, Street WHERE Abonent.StreetCD = Street.StreetCD;. Фрагмент результата выполнения запроса представлен на рис. 3.73.
Рис. 3.73. Естественное соединение таблиц Abonent и Street Такой же результат может быть получен, если использовать следующий запрос на явное естественное соединение: SELECT AccountCD, StreetCD, StreetNM, HouseNo, FlatNo, Fio, Phone FROM Abonent NATURAL JOIN Street;. 3.3.1.3.4. Композиция Для создания композиции таблиц нужно исключить из вывода все столбцы, по которым проводилось соединение таблиц, например следующим образом: SELECT AccountCD, StreetNM, HouseNo, FlatNo, Fio, Phone FROM Abonent, Street WHERE Abonent.StreetCD = Street.StreetCD;. Фрагиент результата выполнения запроса представлен на рис. 3.74.
Рис. 3.74. Композиция таблиц Abonent и Street 3.3.1.3.5. Тета-соединение Тета-соединение предназначено для тех случаев, когда необходимо соединить две таблицы на основе некоторых условий, отличных от равенства. Например, получить тета-соединение таблиц Abonent и Street можно следующим образом: SELECT Abonent.*, Street.* FROM Abonent, Street WHERE Abonent.StreetCD < Street.StreetCD;. Фрагмент результата выполнения запроса представлен на рис. 3.75.
Рис. 3.75. Тета-соединение таблиц Abonent и Street
Рис. 3.76. Результат соединения таблицы со своей копией Такой же результат может быть получен, если использовать следующий запрос на явное соединение: SELECT F.Fio, S.Fio FROM Abonent F JOIN Abonent S ON F.StreetCD = S.StreetCD WHERE F.Fio < S.Fio;. Примером соединения таблицы со своей копией и другой таблицей может быть следующий запрос, выводящий все пары абонентов, имеющих ремонтные заявки с одной и той же неисправностью газового оборудования: SELECT FailureNM, A.AccountCD, B.AccountCD FROM Request A, Request B, Disrepair D WHERE A.FailureCD = B.FailureCD AND D.FailureCD = A.FailureCD AND A.AccountCD < B.AccountCD;. Некоторые многотабличные запросы используют отношения, существующие внутри одной из таблиц. Чтобы обратиться к одной и той же таблице внутри одного запроса, используется псевдоним таблицы, определяемый непосредственно после имени таблицы в предложении FROM запроса SELECT. Например, чтобы найти все пары абонентов, проживающих на одной и той же улице, можно использовать следующее неявное соединение таблицы Abonent со своей копией: SELECT F.Fio, S.Fio FROM Abonent F, Abonent S WHERE F.StreetCD = S.StreetCD AND F.Fio < S.Fio;. В этом примере для таблицы Abonent определены два псевдонима: F (First) и S (Second). Эти псевдонимы будут существовать, пока выполняется запрос. Дополнительное условие поиска F.Fio < S.Fio предназначено для удаления из ТРЗ повторяющихся строк, появляющихся в результате того, что запрос выбирает все комбинации строк с одинаковым кодом улицы. Результат выполнения запроса представлен на рис. 3.76.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |