Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Nieparzysta składnia i enkapsulacja INNER JOIN

Nawiasy nie zmieniają semantyki. Pozycja ON Klauzula kontroluje kolejność logicznego przetwarzania złączeń.

Pierwsze zapytanie

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 

Drugie zapytanie

(Usunięto zbędne nawiasy)

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 

Więc logicznie w pierwszym przykładzie sprzężenie w Transaction, Product dzieje się najpierw, a następnie wirtualna tabela wynikająca z tego jest dołączona do Customer , podczas gdy w drugim przykładzie sprzężenie w Transaction, Customer dzieje się najpierw, a następnie wirtualna tabela wynikająca z tego jest dołączona do Product

Jest to tylko logiczne i ponieważ sprzężenia wewnętrzne są zarówno asocjacyjne, jak i przemienne, prawdopodobnie nie będzie miało to żadnego wpływu na plan wykonania (chyba że dodasz OPTION (FORCE ORDER) do zapytania), ale może to zrobić dla sprzężeń zewnętrznych.

Jest to omówione przez Itzika Ben Gana tutaj ale artykuł zawiera wiele nieścisłości, zobacz list uzupełniający napisany przez Lubora Kollara również.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Katalog pełnotekstowy i autouzupełnianie programu SQL Server

  2. Jak wyeksportować wynik zapytania do pliku .csv lub pliku rozdzielanego tabulatorami w programie SQL Server Management Studio (SSMS) — samouczek SQL Server/TSQL — część 23

  3. SQL, jeśli rekord jest równy rekordowi przed nim

  4. Tworzenie tabeli SQL na podstawie łączenia danych

  5. Dynamiczne wykonywanie SQL w SQL Server