2012-12-06 35 views
29

thể trùng lặp:
MySQL ON vs USING?SỬ DỤNG Từ khoá vs ON khoản - MYSQL

Query 1:

SELECT * 
FROM users 
JOIN orders ON (orders.user_id = users.user_id) 
WHERE users.user_id = 1; 

Query 2:

SELECT * 
FROM users 
JOIN orders USING (user_id) 
WHERE user_id = 1; 

Tôi muốn tham gia đơn đặt hàng và bảng người dùng để nhận một số dữ liệu nhất định. Nó hoạt động tốt. Vấn đề của tôi là vì cả hai truy vấn đều xuất ra cùng một tập kết quả, có giống nhau không? Cái nào hiệu quả hơn để sử dụng? Cái nào tốt cho hiệu suất? Cách nào là phương pháp hay nhất?

+2

[Có.] (Http://dev.mysql.com/doc/refman/5.0/en/join.html) Bạn có điểm chuẩn không? Bạn đã chuẩn? Tiêu chuẩn mã hóa của bạn là gì? – Ben

+2

không phải là nó [đã được thảo luận] (http://stackoverflow.com/questions/11366006/mysql-on-vs-using) một lần? – Geo

Trả lời

29

Điều khoản USING là điều chúng tôi không cần phải đề cập trong điều kiện JOIN khi chúng tôi đang truy xuất dữ liệu từ nhiều bảng. Khi chúng tôi sử dụng mệnh đề USING, tên cột cụ thể đó sẽ có mặt trong cả hai bảng và truy vấn SELECT sẽ tự động kết hợp các bảng đó bằng cách sử dụng tên cột đã cho trong mệnh đề USING.

ví dụ: nếu có hai tên cột phổ biến trong bảng, thì hãy đề cập đến tên cột chung mong muốn trong các điều khoản USING

USING cũng được sử dụng trong khi thực thi SQL động.

ví dụ

EXECUTE IMMEDIATE 'DELETE FROM dept WHERE deptno = :num' 
    USING dept_id; 
  • Mệnh USING: Điều này cho phép bạn chỉ định khóa kết nối theo tên.

  • Điều khoản ON: Cú pháp này cho phép bạn chỉ định tên cột cho các khóa nối trong cả hai bảng.

Mệnh SỬ DỤNG

Mệnh USING được sử dụng nếu nhiều cột chia sẻ cùng tên nhưng bạn không muốn tham gia sử dụng tất cả các cột chung. Các cột được liệt kê trong mệnh đề USING không được có bất kỳ vòng loại nào trong câu lệnh, bao gồm mệnh đề WHERE.

ON khoản

Mệnh ON được sử dụng để tham gia bàn nơi các tên cột không phù hợp trong cả hai bảng. Các điều kiện kết nối được loại bỏ khỏi các điều kiện lọc trong mệnh đề WHERE.