sql >> Database >  >> RDS >> Oracle

Oracle-syntaxis links voegt drie of meer tabellen samen

Je kunt het op een trapsgewijze manier zien. De sleutel is echter om te zoeken naar die tabellen die links en rechts zijn samengevoegd binnen dezelfde query. In dit geval is de volgorde anders:de voorwaarde waarbij de tafel rechts is samengevoegd, wordt als eerste toegepast. Ik hoop dat het volgende diagram hier enig licht op zal werpen:

U kunt de volgorde van deze joins ook controleren door naar het uitvoeringsplan van de query te kijken:

Voor 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 |       |       |          |
------------------------------------------------------------------------

Voor 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. Het gebruik van OR op WHERE-instructie in MySql veroorzaakt trage uitvoering

  2. Waarom is deze query de eerste keer traag nadat ik de service start?

  3. Hoe gebruik je ANY in plaats van IN in een WHERE-clausule met Rails?

  4. C# MySQL tweede DataReader in DataReader while-lus