Chuẩn ANSI092 bao gồm một số cú pháp khá tồi tệ. Kết hợp tự nhiên là một và Mệnh đề sử dụng là một điều khoản khác. IMHO, việc thêm một cột vào bảng sẽ không làm hỏng mã nhưng THAM GIA TỰ NHIÊN sẽ phá vỡ một cách nghiêm trọng nhất. Cách "tốt nhất" để phá vỡ là do lỗi biên dịch. Ví dụ: nếu bạn CHỌN * ở đâu đó, việc thêm một cột có thểkhông biên dịch được. Cách tốt nhất tiếp theo để thất bại sẽ là lỗi thời gian chạy. Điều đó còn tồi tệ hơn vì người dùng của bạn có thể nhìn thấy nó, nhưng nó vẫn cho bạn một cảnh báo tốt rằng bạn đã làm hỏng thứ gì đó. Nếu bạn sử dụng ANSI92 và viết các truy vấn với các phép nối TỰ NHIÊN, nó sẽ không bị hỏng tại thời điểm biên dịch và không bị hỏng khi chạy, truy vấn sẽ đột ngột bắt đầu tạo ra kết quả sai. Những loại bọ này rất quỷ quyệt. Báo cáo bị sai, có khả năng công bố tài chính không chính xác.
Đối với những người không quen thuộc với NATURAL Joins. Chúng nối hai bảng trên mọi tên cột tồn tại trong cả hai bảng. Điều này thực sự tuyệt vời khi bạn có một phím 4 cột và bạn chán gõ phím đó. Sự cố xảy ra khi Table1 có một cột tồn tại từ trước có tên là DESCRIPTION và bạn thêm một cột mới vào Table2 có tên, ồ tôi không biết, một cái gì đó vô hại như, mmm, DESCRIPTION và bây giờ bạn đang kết hợp hai bảng trên VARCHAR2 (1000) trường là biểu mẫu miễn phí.
Điều khoản SỬ DỤNG có thể dẫn đến hoàn toàn không rõ ràng ngoài vấn đề được mô tả ở trên. Trong một bài đăng SO khác , một người nào đó đã hiển thị SQL ANSI-92 này và yêu cầu trợ giúp đọc nó.
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
Điều này là hoàn toàn mơ hồ. Tôi đặt cột UserID trong cả Bảng công ty và bảng người dùng và không có gì phàn nàn. Điều gì sẽ xảy ra nếu cột UserID trong các công ty là ID của người cuối cùng sửa đổi hàng đó?
Tôi nghiêm túc, Bất cứ ai có thể giải thích tại sao sự mơ hồ như vậy là cần thiết? Tại sao nó được xây dựng thẳng vào tiêu chuẩn?
Tôi nghĩ Bill đúng khi có một lượng lớn các nhà phát triển sao chép / dán vào đó thông qua mã hóa. Trên thực tế, tôi có thể thừa nhận rằng tôi là một người như thế khi nói đến ANSI-92. Mọi ví dụ tôi từng thấy đều cho thấy nhiều phép nối được lồng trong dấu ngoặc đơn. Trung thực, điều đó làm cho việc chọn ra các bảng trong sql trở nên khó khăn nhất. Nhưng sau đó một nhà phát triển SQL92 giải thích rằng điều đó thực sự sẽ buộc một thứ tự nối. CHÚA GIÊSU ... tất cả những Copy Pasters mà tôi đã thấy bây giờ đang thực sự buộc một thứ tự gia nhập - một công việc tốt hơn 95% thời gian còn lại cho những người tối ưu hóa, đặc biệt là copy / paster.
Tomalak đã hiểu đúng khi anh ấy nói,
mọi người không chuyển sang cú pháp mới chỉ vì nó ở đó
Nó phải cung cấp cho tôi một cái gì đó và tôi không thấy điều gì ngược lại. Và nếu có một phần ngược lại, phần âm bản là một con chim hải âu quá lớn để có thể bị bỏ qua.