logo
Лабы базы Данных / Базы данных / Введение в модель данных SQL

Соединенные таблицы

В примерах предыдущей и данной лекций присутствовало много запросов с соединениями двух или более таблиц. Условия соединения задавались предикатами сравнения столбцов таблиц, специфицированных в разделе FROM, и входили в состав логических выражений раздела WHERE (или, реже, раздела HAVING). Поскольку на практике требуются разные виды соединений, в стандарте SQL/92 появилась альтернативная возможность спецификации соединений - соединенная таблица (joined table). Соответствующая конструкция может использоваться в разделе FROM выражения запросов и фактически позволяет строить выражения соединений таблиц. Синтаксические правила построения таких выражений выглядят следующим образом:

joined_table ::= cross_join

| qualified_join

| natural_join

| union_join

cross_join ::= table_reference CROSS JOIN table_primary

qualified_join ::= table_reference [ join_type ] JOIN

table_primary join_specification

natural_join ::= table_reference NATURAL [ join_type ]

JOIN table_primary

union_join ::= table_reference UNION JOIN table_primary

join_type ::= INNER | { LEFT | RIGHT | FULL } [ OUTER ]

join_specification ::= ON conditional_expression

| USING (column_comma_list)

Напомним, что синтаксические правила для table_reference и table_primary были показаны в лекции 13.

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