Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_Банки и базы данных.doc
Скачиваний:
49
Добавлен:
25.09.2019
Размер:
656.9 Кб
Скачать

13.6.4. Примеры многотабличных запросов.

Пример 20. Вывести список контактов и номеров телефонов.

SELECT NAME1, NOMER

FROM KONTAKTY K, NOMERA

WHERE KONT_ID=K.ID

ORDER BY NAME1, NOMER

Пример 21. Вывести список контактов-женщин.

SELECT K.NAME1, P.NAZV

FROM KONTAKTY K, POL P

WHERE (K.POL_ID=P.ID) AND (P.NAZV= 'Женский ')

Пример 22. Вывести список контактов с указанием групп контактов.

SELECT K.NAME1, G.NAZV

FROM KONTAKTY K, GRUPPY G, KONT_GR

WHERE (K.ID=KONT_ID) AND (GR_ID=G.ID)

ORDER BY K.NAME1, G.NAZV

Пример 23. Вывести список вызовов определенного контакта.

SELECT V.ID, V.VREMYA, TV.NAZV, V.DLIT, V.STOIM

FROM VYZOVY V, TIPY_VYZ TV, NOMERA N, KONTAKTY K

WHERE (V.TIP_ID=TV.ID) AND (V.NOMER_ID=N.ID) AND (N.KONT_ID=K.ID)

AND K.NAME1= 'Иванов Александр Сергеевич '

ORDER BY V.VREMYA

Пример 24. Вывести список контактов, с которыми состоялся хотя бы один телефонный разговор.

SELECT DISTINCT K.NAME1

FROM VYZOVY V, TIPY_VYZ TV, NOMERA N, KONTAKTY K

WHERE (V.TIP_ID=TV.ID) AND (V.NOMER_ID=N.ID) AND (N.KONT_ID=K.ID)

AND TV.NAZV<> 'Пропущенный'

ORDER BY K.NAME1

Пример 25. Вывести подробную информацию о вызовах (в хронологическом порядке) с указанием типа вызова, номера телефона, типа номера телефона, контакта и мелодии контакта.

SELECT V.ID, TV.NAZV,K.NAME1, N.NOMER,TN.NAZV,V.VREMYA,V.DLIT, V.STOIM, M.NAZV

FROM VYZOVY V, TIPY_VYZ TV, NOMERA N, TIPY_NOM TN, KONTAKTY K, MELODII M

WHERE (V.TIP_ID=TV.ID) AND (V.NOMER_ID=N.ID) AND (N.TIP_ID=TN.ID)

AND (N.KONT_ID=K.ID) AND (K.MEL_ID=M.ID)

ORDER BY V.VREMYA

13.6.5. Соединение таблиц в предложении from.

Различные способы соединения таблиц можно выполнить в предложении FROM при помощи операции JOIN.

Синтаксис:

FROM <имя таблицы1> INNER|LEFT|RIGHT|FULL JOIN <имя таблицы2> ON <условие>.

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

Существует четыре способа соединения: внутреннее (INNER JOIN), левое внешнее (LEFT JOIN), правое внешнее (RIGHT JOIN) и полное внешнее (FULL JOIN).

Примечание. В Microsoft Access операция FULL JOIN не работает!!!

В результаты любого способа соединения попадут строки, для которых выполняется условие.

Внутреннее соединение (INNER JOIN) эквивалентно использованию условия равенства связанных столбцов в предложении WHERE. Помимо этого:

в результаты левого соединения (LEFT JOIN) попадут строки из первой (левой) таблицы, для которых нет связанных строк во второй (правой) таблице;

в результаты правого соединения (RIGHT JOIN) попадут строки из второй (правой) таблицы, для которых нет связанных строк в первой (левой) таблице;

в результаты полного соединения (FULL JOIN) попадут строки из обеих таблиц, для которых нет связанных строк в другой таблице.

При этом отсутствие связанной строки из другой таблицы фиксируется наличием NULL в соответствующих столбцах таблицы результатов запроса.

Пример 26 (20). Вывести список контактов и номеров телефонов.

SELECT K.NAME1, N.NOMER

FROM KONTAKTY K INNER JOIN NOMERA N ON N.KONT_ID=K.ID

ORDER BY K.NAME1, K.NOMER

Пример 27. Вывести список контактов c указанием пола.

Некорректно:

SELECT K.NAME1, P.NAZV

FROM KONTAKTY K, POL P

WHERE K.POL_ID=P.ID

ORDER BY K.NAME1

Правильно:

SELECT K.NAME1, P.NAZV

FROM KONTAKTY K LEFT JOIN POL P ON K.POL_ID=P.ID

ORDER BY K.NAME1

Пример 28 (22). Вывести список контактов с указанием групп контактов.

SELECT K.NAME1, G.NAZV

FROM (KONTAKTY K LEFT JOIN KONT_GR KG ON K.ID = KG.KONT_ID)

LEFT JOIN GRUPPY G ON KG.GR_ID=G.ID

ORDER BY K.NAME1, G.NAZV