Программирование >>  Построение запросов sql 

1 ... 37 38 39 [ 40 ] 41 42 43 ... 101


Такой же результат может быть получен, если использовать следующий запрос на явное соединение:

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.

ACCOUNTCD

STREETCD

STREETNM

HOUSENO

FLATNO

PHONE

005488

ВОЙКОВ ПЕРЕУЛОК

АКСЕНОВ С.А.

556893

115705

ВОЙКОВ ПЕРЕУЛОК

МИЩЕНКО Е.В.

769975

015527

ВОЙКОВ ПЕРЕУЛОК

КОНЮХОВ В.С.

761699

443690

КУТУЗОВА УЛИЦА

ТУЛУПОВА М.И.

214833

136159

КУТУЗОВА УЛИЦА

СВИРИНА З.А.

350003

080270

МОСКОВСКАЯ УЛИЦА

ТИМОШКИНА Н.Г.

321002

Рис. 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.



ACCOUNTCD

STREETNM

HOUSENO

FLATNO

PHONE

005488

ВОИКОВ ПЕРЕУЛОК

АКСЕНОВ С.А.

556893

115705

ВОИКОВ ПЕРЕУЛОК

МИЩЕНКО Е.В.

769975

015527

ВОИКОВ ПЕРЕУЛОК

КОНЮХОВ В.С.

761699

443690

КУТУЗОВА УЛИЦА

ТУЛУПОВА М.И.

214833

136159

КУТУЗОВА УЛИЦА

СВИРИНА З.А.

350003

080270

МОСКОВСКАЯ УЛИЦА

ТИМОШКИНА Н.Г.

321002

Рис. 3.74. Композиция таблиц Abonent и Street

3.3.1.3.5. Тета-соединение

Тета-соединение предназначено для тех случаев, когда необходимо соединить две таблицы на основе некоторых условий, отличных от равенства.

Например, получить тета-соединение таблиц Abonent и Street можно следующим образом:

SELECT Abonent.*, Street.*

FROM Abonent, Street

WHERE Abonent.StreetCD < Street.StreetCD;.

Фрагмент результата выполнения запроса представлен на рис. 3.75.

ACCOUNTCD

STREETCD

HOUSENO

FLATNO

PHONE

STREETCD1

STREETNM

005488

АКСЕНОВ С.А.

556893

КУТУЗОВА УЛИЦА

115705

МИЩЕНКО Е.В.

769975

КУТУЗОВА УЛИЦА

015527

КОНЮХОВ В.С.

761699

КУТУЗОВА УЛИЦА

443069

СТАРОДУБЦЕВ Е.В.

683014

КУТУЗОВА УЛИЦА

136160

ШМАКОВ С.В.

982222

КУТУЗОВА УЛИЦА

126112

МАРКОВА В.П.

683301

КУТУЗОВА УЛИЦА

136169

ДЕНИСОВА Е.К.

680305

КУТУЗОВА УЛИЦА

080270

ТИМОШКИНА Н.Г.

321002

КУТУЗОВА УЛИЦА

015527

КОНЮХОВ В.С.

761699

ГАГАРИНА УЛИЦА

443069

СТАРОДУБЦЕВ Е.В.

683014

ГАГАРИНА УЛИЦА

136160

ШМАКОВ С.В.

982222

ГАГАРИНА УЛИЦА

126112

МАРКОВА В.П.

683301

ГАГАРИНА УЛИЦА

136169

ДЕНИСОВА Е.К.

680305

ГАГАРИНА УЛИЦА

Рис. 3.75. Тета-соединение таблиц Abonent и Street



FIO1

АКСЕНОВ С.А.

МИЩЕНКО Е.В.

АКСЕНОВ С.А.

КОНЮХОВ В.С.

КОНЮХОВ В.С.

МИЩЕНКО Е.В.

СВИРИНА З.А.

ТУЛУПОВА М.И.

СТАРОДУБЦЕВ Е.В.

ШМАКОВ С.В.

МАРКОВА В.П.

СТАРОДУБЦЕВ Е.В.

МАРКОВА В.П.

ШМАКОВ С.В.

ДЕНИСОВА Е.К.

СТАРОДУБЦЕВ Е.В.

ДЕНИСОВА Е.К.

ШМАКОВ С.В.

ДЕНИСОВА Е.К.

МАРКОВА В.П.

ЛУКАТИНА РМ

ШУБИНА Т.П.

Рис. 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.



1 ... 37 38 39 [ 40 ] 41 42 43 ... 101

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика