Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Для УМК БД.doc
Скачиваний:
51
Добавлен:
19.08.2019
Размер:
1.35 Mб
Скачать

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

Важнейшей особенностью запросов SQL является их способность определять связи между несколькими таблицами и выводить информацию из них в терминах этих связей. Такие операции называются объединением, которое является одним из видов операций в реляционных БД - ведь это является основой реляционного подхода к хранению данных в таблицах. Используя объединения, происходит непосредственное связывание информации с любым номером таблицы, и, таким образом, создаются связи между сравнимыми частями данных.

При многотабличном запросе, таблицы, представленные в виде списка в предложении FROM, отделяются друг от друга запятыми. Предикат запроса может ссылаться к любому столбцу любой связанной таблицы и, следовательно, может использоваться для связи между ними. Обычно предикат сравнивает значения в столбцах различных таблиц, чтобы определить, удовлетворяет ли WHERE установленному условию. До этого имена таблиц в запросах опускались, потому запрашивалась только одна таблица одновременно Даже при запросе из нескольких таблиц допускается опускать их имена, если, конечно, они различны. Теперь же возникает необходимость использования имен столбцов и таблиц, поскольку в многотабличном запросе могут возникать неоднозначности.

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

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

В предыдущем примере была установлена связь между двумя таблицами в объединении, но, вообще говоря, эти таблицы, уже были соединены через поле TNUM. Эта связь называется состоянием справочной целостности, и, используя такое объединение в многотабличном запросе, можно извлекать данные в терминах этой связи. Значит в рассмотренном примере объединения столбцы используются для определения предиката запроса, при этом TNUM столбцы удалены из вывода для обеих таблиц, т.к. и без этого понятно, какие преподаватели ведут тот или иной учебный предмет.

В свою очередь, объединения в многотабличных запросах, которые используют предикаты, основанные на равенствах, называются объединениями по равенству. Объединения по равенству это наиболее общий вид объединения, однако, существуют и другие виды объединений - фактически можно использовать любой из реляционных операторов.

В данном случае запрос вряд ли будет иметь практическое значение - с его помощью выводится информация о преподавателях, фамилия которых по алфавиту находится раньше, чем наименование учебного предмета из таблицы PREDMET, при этом выбираются преподаватели с фамилией, которая заключена между буквами К и С.

Допускается также создавать запросы, объединяющие более двух таблиц. Например, необходимо вывести список оценок, выставленных тем или иным преподавателем. Тогда запрос будет объединять сразу три таблицы:

SELECT TEACHERS.TFAM, USP.OCENKA FROM TEACHERS, PREDMET, USP WHERE TEACHERS . TNUM = PREDMET. TNUM AND PREDMET. PNUM = USP.PNUM;

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