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

SQL:chúng ta có cần BẤT KỲ / MỘT SỐ và TẤT CẢ các từ khóa không?

Tôi thấy BẤT KỲ và TẤT CẢ đều rất hữu ích khi bạn không chỉ kiểm tra sự bình đẳng hay bất bình đẳng. Cân nhắc

'blah' LIKE ANY (ARRAY['%lah', '%fah', '%dah']);

như đã sử dụng câu trả lời của tôi cho câu hỏi này .

ANY , ALL và các phủ định của chúng có thể đơn giản hóa rất nhiều mã mà nếu không thì yêu cầu các truy vấn con hoặc CTE không tầm thường và chúng được sử dụng quá mức theo quan điểm của tôi.

Hãy xem xét ANY nào sẽ làm việc với bất kỳ nhà điều hành nào. Nó rất tiện dụng với LIKE~ , nhưng sẽ hoạt động với tsquery, kiểm tra thành viên mảng, kiểm tra khóa hstore và hơn thế nữa.

'a => 1, e => 2'::hstore ? ANY (ARRAY['a', 'b', 'c', 'd'])

hoặc:

'a => 1, b => 2'::hstore ? ALL (ARRAY['a', 'b'])

Không có ANY hoặc ALL bạn có thể phải thể hiện những điều đó dưới dạng truy vấn con hoặc CTE qua VALUES danh sách với một tổng hợp để tạo ra một kết quả duy nhất. Chắc chắn, bạn có thể làm điều đó nếu bạn muốn, nhưng tôi sẽ tuân theo ANY .

Có một cảnh báo thực sự ở đây:Trên các phiên bản Pg cũ hơn, nếu bạn đang viết ANY( SELECT ... ) , bạn gần như chắc chắn sẽ tốt hơn về mặt hiệu suất với EXISTS (SELECT 1 FROM ... WHERE ...) . Nếu bạn đang sử dụng phiên bản mà trình tối ưu hóa sẽ chuyển ANY (...) tham gia thì bạn không cần phải lo lắng. Nếu nghi ngờ, hãy kiểm tra EXPLAIN đầu ra.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. tham chiếu nhiều khóa ngoại php mysql

  2. máy chủ php, mysql đã biến mất

  3. Lỗi cú pháp SQL khi tạo một thủ tục được lưu trữ trong MySQL

  4. Cập nhật MySQL Giá trị cột được tăng lên (Không phải tự động tăng)

  5. Tệp phẳng XML so với phần phụ trợ cơ sở dữ liệu quan hệ