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

Trong các truy vấn MySQL, tại sao lại sử dụng join thay vì ở đâu?

Bất kỳ truy vấn nào liên quan đến nhiều hơn một bảng đều yêu cầu một số dạng liên kết để liên kết các kết quả từ bảng "A" với bảng "B". Phương pháp truyền thống (ANSI-89) để làm điều này là:

  1. Liệt kê các bảng có liên quan trong một danh sách được phân tách bằng dấu phẩy trong mệnh đề FROM
  2. Viết liên kết giữa các bảng trong mệnh đề WHERE

    SELECT *
      FROM TABLE_A a,
           TABLE_B b
     WHERE a.id = b.id
    

Đây là truy vấn được viết lại bằng cú pháp ANSI-92 JOIN:

SELECT *
  FROM TABLE_A a
  JOIN TABLE_B b ON b.id = a.id

Từ góc độ Hiệu suất:

Nếu được hỗ trợ (Oracle 9i +, PostgreSQL 7.2+, MySQL 3.23+, SQL Server 2000+), không có lợi ích về hiệu suất khi sử dụng cú pháp này so với cú pháp khác. Trình tối ưu hóa coi chúng là cùng một truy vấn. Nhưng các truy vấn phức tạp hơn có thể được hưởng lợi từ việc sử dụng cú pháp ANSI-92:

  • Khả năng kiểm soát thứ tự JOIN - thứ tự mà các bảng được quét
  • Khả năng áp dụng các tiêu chí bộ lọc trên một bảng trước khi tham gia

Từ quan điểm bảo trì:

Có nhiều lý do để sử dụng cú pháp ANSI-92 JOIN trên ANSI-89:

  • Dễ đọc hơn, vì tiêu chí JOIN tách biệt với mệnh đề WHERE
  • Ít có khả năng bỏ lỡ các tiêu chí THAM GIA
  • Hỗ trợ cú pháp nhất quán cho các loại JOIN ngoài INNER, giúp các truy vấn dễ sử dụng trên các cơ sở dữ liệu khác
  • Mệnh đề WHERE chỉ đóng vai trò lọc sản phẩm cacte của các bảng đã tham gia

Từ quan điểm thiết kế:

Cú pháp ANSI-92 JOIN là mẫu, không phải phản mẫu:

  • Mục đích của truy vấn rõ ràng hơn; các cột được ứng dụng sử dụng rõ ràng
  • Nó tuân theo quy tắc mô-đun về việc sử dụng cách nhập nghiêm ngặt bất cứ khi nào có thể. Rõ ràng hầu như tốt hơn.

Kết luận

Không quen thuộc và / hoặc cảm thấy thoải mái, tôi không thấy bất kỳ lợi ích nào khi tiếp tục sử dụng mệnh đề ANSI-89 WHERE thay vì cú pháp ANSI-92 JOIN. Một số người có thể phàn nàn rằng cú pháp ANSI-92 dài dòng hơn, nhưng đó là điều làm cho nó rõ ràng. Càng rõ ràng, càng dễ hiểu và dễ bảo trì.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiểu làn sóng nhiệt mới của MySQL

  2. Làm cách nào để lấy ID của nhiều hàng được chèn trong MySQL?

  3. Sử dụng câu lệnh IF trong truy vấn MySQL SELECT

  4. MySQL COUNT () - Nhận số lượng hàng được trả về bởi một truy vấn

  5. Chuỗi kết nối trình điều khiển MySQL JDBC là gì?