sql >> Database >  >> RDS >> Sqlserver

Odd INNER JOIN syntaxis en inkapseling

De haakjes veranderen de semantiek niet. De positie van de ON clausule bepaalt de volgorde van de logische verwerking van joins.

Eerste zoekopdracht

SELECT Customer.Name,
       Product.Desc,
       Transaction.Date
FROM   Product
       INNER JOIN Transaction
         ON Transaction.ProductID = Product.ID
       INNER JOIN Customer
         ON Transaction.CustomerID = Customer.ID 

Tweede zoekopdracht

(Overbodige haakjes verwijderd)

SELECT Customer.Name,
       Product.Desc,
       Transaction.Date
FROM   Product
       INNER JOIN Transaction
                  INNER JOIN Customer
                    ON Transaction.CustomerID = Customer.ID
         ON Transaction.ProductID = Product.ID 

Dus logisch in je eerste voorbeeld de join op Transaction, Product gebeurt eerst, dan wordt de virtuele tafel die daaruit voortvloeit samengevoegd met Customer , terwijl in uw tweede voorbeeld de join op Transaction, Customer gebeurt eerst, dan wordt de virtuele tafel die daaruit voortvloeit samengevoegd met Product

Dit is alleen logisch en aangezien inner joins zowel associatief als commutatief zijn, zal dit waarschijnlijk geen verschil maken voor het uitvoeringsplan (tenzij u OPTION (FORCE ORDER) toevoegt bij de query), maar het kan ook voor outer joins.

Dit wordt hier behandeld door Itzik Ben Gan maar het artikel bevat een aantal onjuistheden, zie de vervolgbrief van Lubor Kollar ook.




  1. hoe sqlite te synchroniseren met Mysql

  2. Kan relationele database horizontaal schalen

  3. ABS() Voorbeelden in SQL Server

  4. Controleer of een tekenreeks een subtekenreeks bevat in SQL Server 2005, met behulp van een opgeslagen procedure