Standar ANSI092 mencakup beberapa sintaks yang cukup keji. Gabungan alami adalah satu dan Klausul PENGGUNAAN adalah yang lain. IMHO, penambahan kolom ke tabel seharusnya tidak merusak kode tetapi NATURAL JOIN rusak dengan cara yang paling mengerikan. Cara "terbaik" untuk memecahkannya adalah dengan kesalahan kompilasi. Misalnya jika Anda PILIH * di suatu tempat, penambahan kolom bisagagal untuk mengkompilasi. Cara terbaik berikutnya untuk gagal adalah kesalahan waktu proses. Ini lebih buruk karena pengguna Anda mungkin melihatnya, tetapi masih memberi Anda peringatan yang bagus bahwa Anda telah merusak sesuatu. Jika Anda menggunakan ANSI92 dan menulis kueri dengan gabungan NATURAL, itu tidak akan rusak pada waktu kompilasi dan tidak akan rusak pada waktu proses, kueri hanya akan tiba-tiba mulai menghasilkan hasil yang salah. Jenis bug ini berbahaya. Laporan salah, kemungkinan pengungkapan keuangan salah.
Bagi mereka yang tidak terbiasa dengan NATURAL Joins. Mereka menggabungkan dua tabel di setiap nama kolom yang ada di kedua tabel. Yang sangat keren ketika Anda memiliki tombol 4 kolom dan Anda bosan mengetiknya. Masalahnya muncul saat Table1 memiliki kolom yang sudah ada sebelumnya bernama DESCRIPTION dan Anda menambahkan kolom baru ke Table2 bernama, oh saya tidak tahu, sesuatu yang tidak berbahaya seperti, mmm, DESCRIPTION dan sekarang Anda bergabung dengan dua tabel di VARCHAR2 (1000) bidang yang bentuk bebas.
Klausa MENGGUNAKAN dapat menyebabkan ambiguitas total selain masalah yang dijelaskan di atas. Di posting SO lainnya , seseorang menunjukkan ANSI-92 SQL ini dan meminta bantuan untuk membacanya.
SELECT c.*
FROM companies AS c
JOIN users AS u USING(companyid)
JOIN jobs AS j USING(userid)
JOIN useraccounts AS us USING(userid)
WHERE j.jobid = 123
Ini sangat ambigu. Saya meletakkan kolom UserID di tabel Perusahaan dan pengguna dan tidak ada keluhan. Bagaimana jika kolom UserID di perusahaan adalah ID dari orang terakhir yang mengubah baris itu?
Saya serius, Adakah yang bisa menjelaskan mengapa ambiguitas seperti itu perlu? Mengapa itu dibangun langsung ke dalam standar?
Saya pikir Bill benar bahwa ada basis besar pengembang yang menyalin / menempelkannya melalui pengkodean. Faktanya, saya dapat mengakui bahwa saya termasuk dalam hal ANSI-92. Setiap contoh yang pernah saya lihat menunjukkan beberapa gabungan yang bersarang dalam tanda kurung. Kejujuran, itu membuat memilih tabel di sql paling sulit. Tapi kemudian seorang evangilis SQL92 menjelaskan bahwa sebenarnya akan memaksa perintah gabungan. YESUS ... semua Copy paster yang pernah saya lihat sekarang benar-benar memaksakan join order - pekerjaan yang 95% waktunya lebih baik diserahkan kepada pengoptimal terutama copy / paster.
Tomalak melakukannya dengan benar ketika dia berkata,
orang tidak beralih ke sintaks baru hanya karena sintaks itu ada
Itu harus memberi saya sesuatu dan saya tidak melihat sisi positifnya. Dan jika ada sisi positifnya, sisi negatifnya adalah elang laut yang terlalu besar untuk diabaikan.