<div id="docs-body">
 <div class="section">
  <div class="titlepage">
   <div>
    <div>
     <h4 class="title">
      <a name="outer-join-simplification">
      </a>
      10.2.1.10 Outer Join Simplification
     </h4>
    </div>
   </div>
  </div>
  <p>
   Table expressions in the
   <code class="literal">
    FROM
   </code>
   clause of a
          query are simplified in many cases.
  </p>
  <p>
   At the parser stage, queries with right outer join operations
          are converted to equivalent queries containing only left join
          operations. In the general case, the conversion is performed
          such that this right join:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting one-line language-sql"><div class="docs-select-all right" id="sa71497724"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token punctuation">(</span>T1<span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span> <span class="token keyword">RIGHT</span> <span class="token keyword">JOIN</span> <span class="token punctuation">(</span>T2<span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span> <span class="token keyword">ON</span> P<span class="token punctuation">(</span>T1<span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">,</span> T2<span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span></code></pre>
  </div>
  <p>
   Becomes this equivalent left join:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting one-line language-sql"><div class="docs-select-all right" id="sa75153091"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token punctuation">(</span>T2<span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span> <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> <span class="token punctuation">(</span>T1<span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span> <span class="token keyword">ON</span> P<span class="token punctuation">(</span>T1<span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">,</span> T2<span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span></code></pre>
  </div>
  <p>
   All inner join expressions of the form
   <code class="literal">
    T1 INNER JOIN
          T2 ON P(T1,T2)
   </code>
   are replaced by the list
   <code class="literal">
    T1,T2
   </code>
   ,
   <code class="literal">
    P(T1,T2)
   </code>
   being
          joined as a conjunct to the
   <code class="literal">
    WHERE
   </code>
   condition
          (or to the join condition of the embedding join, if there is
          any).
  </p>
  <p>
   When the optimizer evaluates plans for outer join operations,
          it takes into consideration only plans where, for each such
          operation, the outer tables are accessed before the inner
          tables. The optimizer choices are limited because only such
          plans enable outer joins to be executed using the nested-loop
          algorithm.
  </p>
  <p>
   Consider a query of this form, where
   <code class="literal">
    R(T2)
   </code>
   greatly narrows the number of matching rows from table
   <code class="literal">
    T2
   </code>
   :
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa69088826"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> T1 <span class="token keyword">FROM</span> T1
  <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> T2 <span class="token keyword">ON</span> P1<span class="token punctuation">(</span>T1<span class="token punctuation">,</span>T2<span class="token punctuation">)</span>
  <span class="token keyword">WHERE</span> P<span class="token punctuation">(</span>T1<span class="token punctuation">,</span>T2<span class="token punctuation">)</span> <span class="token operator">AND</span> R<span class="token punctuation">(</span>T2<span class="token punctuation">)</span></code></pre>
  </div>
  <p>
   If the query is executed as written, the optimizer has no
          choice but to access the less-restricted table
   <code class="literal">
    T1
   </code>
   before the more-restricted table
   <code class="literal">
    T2
   </code>
   , which may produce a very inefficient
          execution plan.
  </p>
  <p>
   Instead, MySQL converts the query to a query with no outer
          join operation if the
   <code class="literal">
    WHERE
   </code>
   condition is
          null-rejected. (That is, it converts the outer join to an
          inner join.) A condition is said to be null-rejected for an
          outer join operation if it evaluates to
   <code class="literal">
    FALSE
   </code>
   or
   <code class="literal">
    UNKNOWN
   </code>
   for any
   <code class="literal">
    NULL
   </code>
   -complemented row generated for the
          operation.
  </p>
  <a class="indexterm" name="idm46045229367968">
  </a>
  <a class="indexterm" name="idm46045229366896">
  </a>
  <p>
   Thus, for this outer join:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting one-line language-sql"><div class="docs-select-all right" id="sa40717270"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql">T1 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> T2 <span class="token keyword">ON</span> T1<span class="token punctuation">.</span>A<span class="token operator">=</span>T2<span class="token punctuation">.</span>A</code></pre>
  </div>
  <p>
   Conditions such as these are null-rejected because they cannot
          be true for any
   <code class="literal">
    NULL
   </code>
   -complemented row (with
   <code class="literal">
    T2
   </code>
   columns set to
   <code class="literal">
    NULL
   </code>
   ):
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa20929956"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql">T2<span class="token punctuation">.</span>B <span class="token operator">IS</span> <span class="token operator">NOT</span> <span class="token boolean">NULL</span>
T2<span class="token punctuation">.</span>B <span class="token operator">&gt;</span> <span class="token number">3</span>
T2<span class="token punctuation">.</span>C <span class="token operator">&lt;=</span> T1<span class="token punctuation">.</span>C
T2<span class="token punctuation">.</span>B <span class="token operator">&lt;</span> <span class="token number">2</span> <span class="token operator">OR</span> T2<span class="token punctuation">.</span>C <span class="token operator">&gt;</span> <span class="token number">1</span></code></pre>
  </div>
  <p>
   Conditions such as these are not null-rejected because they
          might be true for a
   <code class="literal">
    NULL
   </code>
   -complemented row:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa14993757"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql">T2<span class="token punctuation">.</span>B <span class="token operator">IS</span> <span class="token boolean">NULL</span>
T1<span class="token punctuation">.</span>B <span class="token operator">&lt;</span> <span class="token number">3</span> <span class="token operator">OR</span> T2<span class="token punctuation">.</span>B <span class="token operator">IS</span> <span class="token operator">NOT</span> <span class="token boolean">NULL</span>
T1<span class="token punctuation">.</span>B <span class="token operator">&lt;</span> <span class="token number">3</span> <span class="token operator">OR</span> T2<span class="token punctuation">.</span>B <span class="token operator">&gt;</span> <span class="token number">3</span></code></pre>
  </div>
  <p>
   The general rules for checking whether a condition is
          null-rejected for an outer join operation are simple:
  </p>
  <div class="itemizedlist">
   <ul class="itemizedlist" style="list-style-type: disc; ">
    <li class="listitem">
     <p>
      It is of the form
      <code class="literal">
       A IS NOT NULL
      </code>
      , where
      <code class="literal">
       A
      </code>
      is an attribute of any of the inner
              tables
     </p>
    </li>
    <li class="listitem">
     <p>
      It is a predicate containing a reference to an inner table
              that evaluates to
      <code class="literal">
       UNKNOWN
      </code>
      when one of
              its arguments is
      <code class="literal">
       NULL
      </code>
     </p>
    </li>
    <li class="listitem">
     <p>
      It is a conjunction containing a null-rejected condition
              as a conjunct
     </p>
    </li>
    <li class="listitem">
     <p>
      It is a disjunction of null-rejected conditions
     </p>
    </li>
   </ul>
  </div>
  <p>
   A condition can be null-rejected for one outer join operation
          in a query and not null-rejected for another. In this query,
          the
   <code class="literal">
    WHERE
   </code>
   condition is null-rejected for
          the second outer join operation but is not null-rejected for
          the first one:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa51634784"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> T1 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> T2 <span class="token keyword">ON</span> T2<span class="token punctuation">.</span>A<span class="token operator">=</span>T1<span class="token punctuation">.</span>A
                 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> T3 <span class="token keyword">ON</span> T3<span class="token punctuation">.</span>B<span class="token operator">=</span>T1<span class="token punctuation">.</span>B
  <span class="token keyword">WHERE</span> T3<span class="token punctuation">.</span>C <span class="token operator">&gt;</span> <span class="token number">0</span></code></pre>
  </div>
  <p>
   If the
   <code class="literal">
    WHERE
   </code>
   condition is null-rejected for
          an outer join operation in a query, the outer join operation
          is replaced by an inner join operation.
  </p>
  <p>
   For example, in the preceding query, the second outer join is
          null-rejected and can be replaced by an inner join:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa82962972"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> T1 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> T2 <span class="token keyword">ON</span> T2<span class="token punctuation">.</span>A<span class="token operator">=</span>T1<span class="token punctuation">.</span>A
                 <span class="token keyword">INNER</span> <span class="token keyword">JOIN</span> T3 <span class="token keyword">ON</span> T3<span class="token punctuation">.</span>B<span class="token operator">=</span>T1<span class="token punctuation">.</span>B
  <span class="token keyword">WHERE</span> T3<span class="token punctuation">.</span>C <span class="token operator">&gt;</span> <span class="token number">0</span></code></pre>
  </div>
  <p>
   For the original query, the optimizer evaluates only plans
          compatible with the single table-access order
   <code class="literal">
    T1,T2,T3
   </code>
   . For the rewritten query, it
          additionally considers the access order
   <code class="literal">
    T3,T1,T2
   </code>
   .
  </p>
  <p>
   A conversion of one outer join operation may trigger a
          conversion of another. Thus, the query:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa59083841"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> T1 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> T2 <span class="token keyword">ON</span> T2<span class="token punctuation">.</span>A<span class="token operator">=</span>T1<span class="token punctuation">.</span>A
                 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> T3 <span class="token keyword">ON</span> T3<span class="token punctuation">.</span>B<span class="token operator">=</span>T2<span class="token punctuation">.</span>B
  <span class="token keyword">WHERE</span> T3<span class="token punctuation">.</span>C <span class="token operator">&gt;</span> <span class="token number">0</span></code></pre>
  </div>
  <p>
   Is first converted to the query:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa17936104"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> T1 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> T2 <span class="token keyword">ON</span> T2<span class="token punctuation">.</span>A<span class="token operator">=</span>T1<span class="token punctuation">.</span>A
                 <span class="token keyword">INNER</span> <span class="token keyword">JOIN</span> T3 <span class="token keyword">ON</span> T3<span class="token punctuation">.</span>B<span class="token operator">=</span>T2<span class="token punctuation">.</span>B
  <span class="token keyword">WHERE</span> T3<span class="token punctuation">.</span>C <span class="token operator">&gt;</span> <span class="token number">0</span></code></pre>
  </div>
  <p>
   Which is equivalent to the query:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa60836723"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> <span class="token punctuation">(</span>T1 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> T2 <span class="token keyword">ON</span> T2<span class="token punctuation">.</span>A<span class="token operator">=</span>T1<span class="token punctuation">.</span>A<span class="token punctuation">)</span><span class="token punctuation">,</span> T3
  <span class="token keyword">WHERE</span> T3<span class="token punctuation">.</span>C <span class="token operator">&gt;</span> <span class="token number">0</span> <span class="token operator">AND</span> T3<span class="token punctuation">.</span>B<span class="token operator">=</span>T2<span class="token punctuation">.</span>B</code></pre>
  </div>
  <p>
   The remaining outer join operation can also be replaced by an
          inner join because the condition
   <code class="literal">
    T3.B=T2.B
   </code>
   is null-rejected. This results in a query with no outer joins
          at all:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa25027061"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> <span class="token punctuation">(</span>T1 <span class="token keyword">INNER</span> <span class="token keyword">JOIN</span> T2 <span class="token keyword">ON</span> T2<span class="token punctuation">.</span>A<span class="token operator">=</span>T1<span class="token punctuation">.</span>A<span class="token punctuation">)</span><span class="token punctuation">,</span> T3
  <span class="token keyword">WHERE</span> T3<span class="token punctuation">.</span>C <span class="token operator">&gt;</span> <span class="token number">0</span> <span class="token operator">AND</span> T3<span class="token punctuation">.</span>B<span class="token operator">=</span>T2<span class="token punctuation">.</span>B</code></pre>
  </div>
  <p>
   Sometimes the optimizer succeeds in replacing an embedded
          outer join operation, but cannot convert the embedding outer
          join. The following query:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa37119848"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> T1 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span>
              <span class="token punctuation">(</span>T2 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> T3 <span class="token keyword">ON</span> T3<span class="token punctuation">.</span>B<span class="token operator">=</span>T2<span class="token punctuation">.</span>B<span class="token punctuation">)</span>
              <span class="token keyword">ON</span> T2<span class="token punctuation">.</span>A<span class="token operator">=</span>T1<span class="token punctuation">.</span>A
  <span class="token keyword">WHERE</span> T3<span class="token punctuation">.</span>C <span class="token operator">&gt;</span> <span class="token number">0</span></code></pre>
  </div>
  <p>
   Is converted to:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa78604685"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> T1 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span>
              <span class="token punctuation">(</span>T2 <span class="token keyword">INNER</span> <span class="token keyword">JOIN</span> T3 <span class="token keyword">ON</span> T3<span class="token punctuation">.</span>B<span class="token operator">=</span>T2<span class="token punctuation">.</span>B<span class="token punctuation">)</span>
              <span class="token keyword">ON</span> T2<span class="token punctuation">.</span>A<span class="token operator">=</span>T1<span class="token punctuation">.</span>A
  <span class="token keyword">WHERE</span> T3<span class="token punctuation">.</span>C <span class="token operator">&gt;</span> <span class="token number">0</span></code></pre>
  </div>
  <p>
   That can be rewritten only to the form still containing the
          embedding outer join operation:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa46473180"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> T1 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span>
              <span class="token punctuation">(</span>T2<span class="token punctuation">,</span>T3<span class="token punctuation">)</span>
              <span class="token keyword">ON</span> <span class="token punctuation">(</span>T2<span class="token punctuation">.</span>A<span class="token operator">=</span>T1<span class="token punctuation">.</span>A <span class="token operator">AND</span> T3<span class="token punctuation">.</span>B<span class="token operator">=</span>T2<span class="token punctuation">.</span>B<span class="token punctuation">)</span>
  <span class="token keyword">WHERE</span> T3<span class="token punctuation">.</span>C <span class="token operator">&gt;</span> <span class="token number">0</span></code></pre>
  </div>
  <p>
   Any attempt to convert an embedded outer join operation in a
          query must take into account the join condition for the
          embedding outer join together with the
   <code class="literal">
    WHERE
   </code>
   condition. In this query, the
   <code class="literal">
    WHERE
   </code>
   condition is not null-rejected for
          the embedded outer join, but the join condition of the
          embedding outer join
   <code class="literal">
    T2.A=T1.A AND
          T3.C=T1.C
   </code>
   is null-rejected:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa51078108"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> T1 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span>
              <span class="token punctuation">(</span>T2 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> T3 <span class="token keyword">ON</span> T3<span class="token punctuation">.</span>B<span class="token operator">=</span>T2<span class="token punctuation">.</span>B<span class="token punctuation">)</span>
              <span class="token keyword">ON</span> T2<span class="token punctuation">.</span>A<span class="token operator">=</span>T1<span class="token punctuation">.</span>A <span class="token operator">AND</span> T3<span class="token punctuation">.</span>C<span class="token operator">=</span>T1<span class="token punctuation">.</span>C
  <span class="token keyword">WHERE</span> T3<span class="token punctuation">.</span>D <span class="token operator">&gt;</span> <span class="token number">0</span> <span class="token operator">OR</span> T1<span class="token punctuation">.</span>D <span class="token operator">&gt;</span> <span class="token number">0</span></code></pre>
  </div>
  <p>
   Consequently, the query can be converted to:
  </p>
  <div class="copytoclipboard-wrapper">
   <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa88925804"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> T1 <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span>
              <span class="token punctuation">(</span>T2<span class="token punctuation">,</span> T3<span class="token punctuation">)</span>
              <span class="token keyword">ON</span> T2<span class="token punctuation">.</span>A<span class="token operator">=</span>T1<span class="token punctuation">.</span>A <span class="token operator">AND</span> T3<span class="token punctuation">.</span>C<span class="token operator">=</span>T1<span class="token punctuation">.</span>C <span class="token operator">AND</span> T3<span class="token punctuation">.</span>B<span class="token operator">=</span>T2<span class="token punctuation">.</span>B
  <span class="token keyword">WHERE</span> T3<span class="token punctuation">.</span>D <span class="token operator">&gt;</span> <span class="token number">0</span> <span class="token operator">OR</span> T1<span class="token punctuation">.</span>D <span class="token operator">&gt;</span> <span class="token number">0</span></code></pre>
  </div>
 </div>
 <br/>
</div>
