sql >> Database teknologi >  >> RDS >> PostgreSQL

Betyder rækkefølgen af ​​tabeller i en joinforbindelse, når LEFT (ydre) joins bruges?

Det er det samme, men det er tvetydigt som fanden med det implicitte KRYDS FORBINDES. Brug eksplicitte JOINS.

Hvis du tilslutter dig WHERE-klausulen, så kan resultaterne adskiller sig, fordi sammenføjninger og filtre er blandet sammen.

SELECT ....
  FROM apples a
       JOIN
       bananas b ON ...
       JOIN 
       oranges o ON ...
       LEFT JOIN
       kiwis k ON k.orange_id = o.id
 WHERE (filters only)

Bemærkninger:

  • INNER JOINS og CROSS JOINS er kommutative og associative:Rækkefølgen betyder normalt ikke noget.
  • YDRE JOINS er ikke, hvilket du har identificeret
  • SQL er deklarativ:du fortæller optimeringsværktøjet, hvad du vil have, ikke hvordan det skal gøres. Dette fjerner JOIN-ordreovervejelser (med forbehold for de foregående 2 punkter)


  1. Fejlfinding Variable Memory Grants i SQL Server

  2. Hvorfor giver Oracles DECODE mig en anden værdi end NVL?

  3. SQL Server DELETE – Fjernelse af en eller flere rækker fra en tabel med lidt avancerede scenarier

  4. Meget langsom opstart af Spring Boot-applikation