Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lect2_m3_ipovs_ipovs_bd_230100.doc
Скачиваний:
13
Добавлен:
27.03.2016
Размер:
94 Кб
Скачать
☆

Многотабличные запросы на чтение (соединения)

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

Чтобы понять, как в SQL реализуются многотабличные запросы, начнем с рассмотрения простого запроса, который соединяет данные из двух различных таблиц: вывести список жителей, имеющих телефоны, с указанием фамилии, имени, отчества, адреса квартиры и номера телефона.

Из рис. 3.15 видно, что три запрашиваемых элемента данных хранятся в двух различных таблицах:

1) в таблице PERSON содержатся фамилия, имя, отчество жителя и адрес его квартиры, но в ней отсутствует номер телефона;

2) в таблице TPHONE содержатся номера телефонов и адреса квартир, где они установлены, но в ней нет информации о жителях.

Однако между двумя этими таблицами существует связь по адресам квартир. Очевидно, чтобы получить требуемую таблицу результатов, в операторе SELECT надо учесть существующую связь между таблицами. Этот оператор должен выполнить предположительно следующие действия:

1) образовать пустую таблицу результатов из трех столбцов, содержащих значения FIO, ADR, NTEL, и начать просмотр таблицы TPHONE;

2) найти в таблицах TPHONE и PERSON пару строк, в которых совпадают значения столбцов ADR;

3) из найденной пары строк выбрать фамилию, имя, отчество(FIO),адрес квартиры(ADR), номер телефона(NTEL) и сформировать из этих значений одну новую строку в таблице результатов;

4) пока не просмотрены все строки в таблице TPHONE, переходить к шагу 2.

Конечно, это не единственный способ получить таблицу результатов данного запроса, но как бы она ни получалась, всегда имеются две особенности:

1) каждая строка таблицы результатов запроса формируется из пары строк: одна строка находится в таблице TPHONE, а другая - в таблице PERSON;

2) для нахождения данной пары строк производится сравнение содержимого соответствующих столбцов в этих таблицах.

Процесс формирования строк путем сравнения содержимого соответствующих столбцов называется соединением таблиц. Соединение таблиц задается в предложении WHERE, в котором условие поиска имеет вид сравнения столбцов из разных таблиц.

В нашем примере нужная таблица результатов формируется оператором:

SELECT FIO, ADR, NTEL

FROM PERSON, TPHONE

WHERE PERSON.ADR=TPHONE.ADR

Обратите внимание, что в операторе SELECT нет указаний о том, как должен выполняться запрос. В нем нет никаких упоминаний вроде «начните с жителей» или «начните с телефонов». Вместо этого в запросе указано, что должны представлять собой результаты запроса. Способ получения результатов определяет сама СУБД.

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

Например, можно вывести список жителей, имеющих телефоны и получающих общий доход не меньший 1400 руб.:

SELECT FIO, ADR, NTEL

FROM PERSON, NTEL

WHERE PERSON.ADR=TPHONE.ADR

AND SUMD>=1400.00

Язык SQL позволяет соединять данные из трех или более таблиц, используя ту же методику, что и для соединения данных из двух таблиц. Например, следующий оператор выводит список жителей, имеющих телефоны и получающих общий доход не меньше 1400 руб., с указанием категорий квартиры и телефона:

SELECT FIO, ADR, KCATEGORY, NTEL, TCATEGORY