Примерный порядок выполнения многотабличных запросов

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

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

Пример 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

Различные способы соединения таблиц можно выполнить в предложении 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

Таблица результатов многотабличного запроса генерируется следующим образом:

1. Из всех таблиц, указанных в предложении FROM, сформировать одну общую таблицу как декартово произведение (или соединение при наличии операции JOIN).

2. Если имеется предложение WHERE, применить заданное в нем условие отбора к каждой строке общей таблицы и оставить только те строки, для которых это условие выполняется (TRUE), остальные строки отбросить.

3. Для каждой из оставшихся строк вычислить значение каждого элемента в списке возвращаемых столбцов (предложение SELECT) и создать одну строку таблицы результатов запроса.

4. Если указано ключевое слово DISTINCT, удалить из таблицы результатов запроса все повторяющиеся строки.

5. Если имеется предложение ORDER BY, отсортировать результаты запроса.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: