Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Синтаксис явного INNER JOIN в SQL-92

Синтаксис явного INNER JOIN в SQL-92

Явное внутреннее соединение является предпочтительным для Firebird и других реляционных СУБД, которые его поддерживают. Если оптимизатор способен вычислить план запроса, то неважно, что синтаксис SQL-92 будет лучше или хуже более раннего синтаксиса, потому что интерпретатор DSQL будет транслировать любой оператор в идентичную двоичную форму для анализа ее оптимизатором.

Явное соединение делает код оператора более читаемым и согласованным с другими стилями соединения, поддерживаемыми SQL-92 и последующими стандартами. Иногда его синтаксис называют синтаксисом условного соединения, потому что структура предложения JOIN. .. ON дает возможность отличать условия соединения от условий поиска. Не удивительно, такое использование термина "условное" может все запутать!

Ключевое слово INNER совсем необязательно и обычно опускается. Присутствие только слова JOIN имеет точно тот же смысл, что и INNER JOIN. (Если слову JOIN предшествуют LEFT, RIGHT или FULL, то это не является внутренним соединением.)

Три или более потока

Если существует более двух потоков (таблиц), просто добавляйте предложения JOIN. .. ON для каждого отношения. Следующий пример добавляет третий поток в предыдущий пример, соединяя его со вторым потоком через другой внешний ключ отношения:

SELECT

Table1.PK,

Table1.COL1,

Table2.PK,

Table2.COLX,

Table3.COLY

FROM Table1 JOIN Table2

ON Table1.PK = Table2.FK

JOIN Table3 ON TABLE2.PKX = Table3.FK

WHERE Table3.STATUS = 'SOLD'

AND <другие-условия-поиска>

Связи составных ключей

Если одно отношение связано более чем с одним столбцом, используйте ключевое слово AND для разделения каждого условия соединения, как вы делаете в предложении WHERE для множества условий. Возьмем, для примера, таблицу TableA с первичным ключом (PKI, РК2), связанную с таблицей TableB через внешний ключ (FKI, FK2):

SELECT

TableA.COL1,

TableA.COL2,

TableB.COLX,

TableB.COLY

FROM TableA JOIN TableB

ON TableA.PKI = TableB.FKI

AND TableA.PKI = TableB.FK2

WHERE ...

Оглавление книги


Генерация: 1.470. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз