Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tại sao Group By của Mysql và Group by Oracle lại khác nhau

Các nhà thiết kế MySQL đã đưa phần mở rộng không chuẩn của họ vào GROUP BY với nỗ lực làm cho việc phát triển dễ dàng hơn và một số truy vấn nhất định hiệu quả hơn.

Đây là cơ sở lý luận của họ.

https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html

Có một chế độ máy chủ được gọi là ONLY_FULL_GROUP_BY vô hiệu hóa các tiện ích mở rộng không chuẩn. Bạn có thể đặt chế độ này bằng cách sử dụng câu lệnh này.

 SET SESSION SQL_MODE='ONLY_FULL_GROUP_BY'  

Đây là trích dẫn từ trang đó, có thêm phần nhấn mạnh.

Nếu ONLY_FULL_GROUP_BY bị tắt, một tiện ích mở rộng MySQL cho việc sử dụng SQL tiêu chuẩn của GROUP BY cho phép danh sách chọn, HAVING điều kiện, hoặc ORDER BY danh sách để tham chiếu đến các cột không được tổng hợp ngay cả khi các cột không phụ thuộc về mặt chức năng vào GROUP BY cột ... Trong trường hợp này, máy chủ được quyền chọn bất kỳ giá trị nào từ mỗi nhóm , vì vậy, trừ khi chúng giống nhau, các giá trị được chọn là không xác định , mà có lẽ không phải là những gì bạn muốn.

Từ quan trọng ở đây là không xác định. Điều đó nghĩa là gì? Nó có nghĩa là ngẫu nhiên, nhưng tệ hơn. Nếu máy chủ chọn các giá trị ngẫu nhiên, điều đó có nghĩa là nó sẽ trả về các giá trị khác nhau trong các truy vấn khác nhau, vì vậy bạn có cơ hội gặp sự cố khi kiểm tra phần mềm của mình. Nhưng không xác định trong ngữ cảnh này có nghĩa là máy chủ chọn cùng một giá trị mọi lúc, cho đến khi không.

Tại sao nó có thể thay đổi giá trị nó chọn? Nâng cấp máy chủ là một lý do. Một thay đổi đối với kích thước bảng có thể là một thay đổi khác. Vấn đề là, máy chủ có thể tự do trả về bất kỳ giá trị nào nó muốn.

Tôi ước những người mới học SQL sẽ đặt ONLY_FULL_GROUP_BY này cách thức; họ sẽ nhận được nhiều kết quả dễ đoán hơn từ các truy vấn của họ và máy chủ sẽ từ chối các truy vấn không xác định.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo phạm vi ngày từ hai cột ngày

  2. Thêm 2 tháng vào dấu thời gian hiện tại

  3. Truy vấn hai bảng từ các giản đồ khác nhau

  4. Các cụm đếm SQL Oracle

  5. Oracle:DDL và khôi phục giao dịch