Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Sintaks dan enkapsulasi INNER JOIN yang aneh

Tanda kurung tidak mengubah semantik. Posisi ON klausa mengontrol urutan pemrosesan logis dari gabungan.

Kueri Pertama

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 

Kueri Kedua

(Kurung redundan dihapus)

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 

Jadi secara logis dalam contoh pertama Anda bergabung di Transaction, Product terjadi terlebih dahulu kemudian tabel virtual yang dihasilkan dari itu bergabung ke Customer , sedangkan pada contoh kedua Anda bergabung di Transaction, Customer terjadi terlebih dahulu kemudian tabel virtual yang dihasilkan dari itu digabungkan ke Product

Ini hanya secara logis dan karena gabungan bagian dalam bersifat asosiatif dan komutatif, ini kemungkinan tidak akan membuat perbedaan pada rencana eksekusi (kecuali jika Anda menambahkan OPTION (FORCE ORDER) ke kueri) tetapi dapat dilakukan untuk gabungan luar.

Ini dicakup oleh Itzik Ben Gan di sini tetapi artikel memiliki sejumlah ketidakakuratan, lihat surat tindak lanjut oleh Lubor Kollar juga.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah SQL Server Pivot tanpa mengetahui nama kolom yang dihasilkan?

  2. Pemicu SQL Server - pengelompokan berdasarkan transaksi

  3. SQL - urutan dengan urutan daftar

  4. Objek 'DF__*' bergantung pada kolom '*' - Mengubah int menjadi double

  5. Dapatkan Bagian Kanan dari sebuah String di SQL Server (T-SQL)