Oracle 5.0 Reference Manual page 693

Table of Contents

Advertisement

At the parser stage, queries with right outer joins operations are converted to equivalent queries
containing only left join operations. In the general case, the conversion is performed according to the
following rule:
(T1, ...) RIGHT JOIN (T2,...) ON P(T1,...,T2,...) =
(T2, ...) LEFT JOIN (T1,...) ON P(T1,...,T2,...)
All inner join expressions of the form
being joined as a conjunct to the
T1,T2,
P(T1,T2)
embedding join, if there is any).
When the optimizer evaluates plans for join queries with outer join operation, it takes into consideration
only the plans where, for each such operation, the outer tables are accessed before the inner tables.
The optimizer options are limited because only such plans enables us to execute queries with outer
joins operations by the nested loop schema.
Suppose that we have a query of the form:
SELECT * T1 LEFT JOIN T2 ON P1(T1,T2)
WHERE P(T1,T2) AND R(T2)
with
narrowing greatly the number of matching rows from table T2. If we executed the query as
R(T2)
it is, the optimizer would have no other choice besides to access table
to a very inefficient execution plan.
Fortunately, MySQL converts such a query into a query without an outer join operation if the
condition is null-rejected. A condition is called null-rejected for an outer join operation if it evaluates to
or to
for any NULL-complemented row built for the operation.
FALSE
UNKNOWN
Thus, for this outer join:
T1 LEFT JOIN T2 ON T1.A=T2.A
Conditions such as these are null-rejected:
T2.B IS NOT NULL,
T2.B > 3,
T2.C <= T1.C,
T2.B < 2 OR T2.C > 1
Conditions such as these are not null-rejected:
T2.B IS NULL,
T1.B < 3 OR T2.B IS NOT NULL,
T1.B < 3 OR T2.B > 3
The general rules for checking whether a condition is null-rejected for an outer join operation are
simple. A condition is null-rejected in the following cases:
• If it is of the form
A IS NOT
• If it is a predicate containing a reference to an inner table that evaluates to
arguments is
NULL
• If it is a conjunction containing a null-rejected condition as a conjunct
• If it is a disjunction of null-rejected conditions
A condition can be null-rejected for one outer join operation in a query and not null-rejected for another.
In the query:
SELECT * FROM T1 LEFT JOIN T2 ON T2.A=T1.A
LEFT JOIN T3 ON T3.B=T1.B
WHERE T3.C > 0
Optimizing
Statements
SELECT
T1 INNER JOIN T2 ON P(T1,T2)
WHERE
NULL, where
is an attribute of any of the inner tables
A
673
are replaced by the list
condition (or to the join condition of the
before table
T1
UNKNOWN
that may lead
T2
WHERE
when one of its

Advertisement

Table of Contents
loading

This manual is also suitable for:

Mysql 5.0

Table of Contents