sql >> Databáze >  >> RDS >> Oracle

Oracle syntax left spojuje tři nebo více tabulek

Můžete to vidět kaskádovým způsobem. Klíčem je však hledat ty tabulky, které jsou spojeny zleva a zprava v rámci stejného dotazu. V tomto případě je pořadí jiné:jako první se použije podmínka, kdy je stůl správně spojen. Doufám, že následující schéma to trochu osvětlí:

Pořadí těchto spojení můžete také zkontrolovat pohledem na plán provádění dotazu:

Pro Q1:

select a.c a, b.c b, c.c c   from a, b, c  where a.c = b.c (+)    and
c.c = a.c (+)

------------------------------------------------------------------------
| Id  | Operation           | Name | E-Rows |  OMem |  1Mem | Used-Mem |
------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |      |        |       |       |          |
|*  1 |  HASH JOIN OUTER    |      |      4 |  2168K|  2168K|  805K (0)|
|*  2 |   HASH JOIN OUTER   |      |      4 |  2616K|  2616K|  981K (0)|
|   3 |    TABLE ACCESS FULL| C    |      4 |       |       |          |
|   4 |    TABLE ACCESS FULL| A    |      4 |       |       |          |
|   5 |   TABLE ACCESS FULL | B    |      4 |       |       |          |
------------------------------------------------------------------------

Pro Q2:

select a.c a, b.c b, c.c c   from a, b, c  where c.c = a.c (+)    and
a.c = b.c (+)

------------------------------------------------------------------------
| Id  | Operation           | Name | E-Rows |  OMem |  1Mem | Used-Mem |
------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |      |        |       |       |          |
|*  1 |  HASH JOIN OUTER    |      |      4 |  2168K|  2168K|  801K (0)|
|*  2 |   HASH JOIN OUTER   |      |      4 |  2616K|  2616K|  983K (0)|
|   3 |    TABLE ACCESS FULL| C    |      4 |       |       |          |
|   4 |    TABLE ACCESS FULL| A    |      4 |       |       |          |
|   5 |   TABLE ACCESS FULL | B    |      4 |       |       |          |
------------------------------------------------------------------------


  1. Zkontrolujte, zda uživatelské jméno již existuje v databázi MySQL PHP

  2. Potíže se zápisem uloženého procesu pro načítání dat pro stránkování Jqgrid

  3. Výhody a nevýhody používání SqlCommand Prepare v C#?

  4. MySQL vytvoří databázi, pokud neexistuje