Декартово произведение

В связи с тем, что многотабличные запросы выполняются путем сравнения столбцов, оператор SELECT должен содержать условие поиска, которое определяет соотношение столбцов. Если условие поиска опущено или недействительно, результирующее множество будет содержать все возможные комбинации пар строк из обеих таблиц (декартово произведение). В примере ниже показано декартово произведение двух таблиц: DEPT, состоящей из 4-х строк и EMP, содержащей 14 строк. Результирующее множество представляет собой таблицу, состоящую из 56 (4´14) строк.

SQL> SELECT d.deptno, dname, e.deptno, ename FROM dept d, emp e;

DEPTNO DNAME DEPTNO ENAME

--------- -------------- --------- ----------

10 ACCOUNTING 20 SMITH

20 RESEARCH 20 SMITH

30 SALES 20 SMITH

40 OPERATIONS 20 SMITH

10 ACCOUNTING 30 ALLEN

20 RESEARCH 30 ALLEN

30 SALES 30 ALLEN

40 OPERATIONS 30 ALLEN

56 rows selected.

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