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

Apakah kueri ANSI JOIN vs. non-ANSI JOIN akan bekerja secara berbeda?

Kedua kueri tersebut sama, kecuali yang kedua adalah sintaks SQL ANSI-92 dan yang pertama adalah sintaks SQL lama yang tidak memasukkan klausa join. Mereka harus menghasilkan rencana kueri internal yang sama persis, meskipun Anda mungkin ingin memeriksanya.

Anda harus menggunakan sintaks ANSI-92 karena beberapa alasan

  • Penggunaan klausa JOIN memisahkan logika hubungan dari logika filter (WHERE) dan dengan demikian lebih bersih dan lebih mudah dipahami.
  • Tidak masalah dengan kueri khusus ini, tetapi ada beberapa keadaan di mana sintaks gabungan luar yang lebih lama (menggunakan + ) ambigu dan karenanya hasil kueri bergantung pada implementasi - atau kueri tidak dapat diselesaikan sama sekali. Ini tidak terjadi dengan ANSI-92
  • Ini praktik yang baik karena sebagian besar pengembang dan dba akan menggunakan ANSI-92 saat ini dan Anda harus mengikuti standarnya. Tentu saja semua alat kueri modern akan menghasilkan ANSI-92.
  • Seperti yang ditunjukkan oleh @gbn, ia cenderung menghindari penggabungan silang yang tidak disengaja.

Saya sendiri menolak ANSI-92 untuk beberapa waktu karena ada sedikit keuntungan konseptual untuk sintaks lama karena lebih mudah untuk membayangkan SQL sebagai gabungan Cartesian massal dari semua tabel yang digunakan diikuti oleh operasi penyaringan - teknik mental yang dapat berguna untuk memahami apa yang dilakukan kueri SQL. Namun saya memutuskan beberapa tahun yang lalu bahwa saya perlu bergerak dengan waktu dan setelah periode penyesuaian yang relatif singkat saya sekarang sangat menyukainya - terutama karena alasan pertama yang diberikan di atas. Satu-satunya tempat di mana seseorang harus meninggalkan sintaks ANSI-92, atau lebih tepatnya tidak menggunakan opsi, adalah dengan gabungan alami yang secara implisit berbahaya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan SQL untuk menemukan gaji tertinggi ke-N dari tabel gaji

  2. Periksa apakah ada baris, jika tidak masukkan

  3. Apa yang dinamakan pipa?

  4. Pemeliharaan Database Sistem SQL Server

  5. Database yang dapat menangani>500 juta baris