Nó chủ yếu là đường cú pháp, nhưng có một số khác biệt đáng chú ý:
BẬT là tổng quát hơn của cả hai. Người ta có thể nối các bảng TRÊN một cột, một tập hợp các cột và thậm chí là một điều kiện. Ví dụ:
SELECT * FROM world.City JOIN world.Country ON (City.CountryCode = Country.Code) WHERE ...
SỬ DỤNG hữu ích khi cả hai bảng chia sẻ một cột có cùng tên chính xác mà chúng tham gia. Trong trường hợp này, người ta có thể nói:
SELECT ... FROM film JOIN film_actor USING (film_id) WHERE ...
Một điều thú vị bổ sung là người ta không cần phải hội đủ điều kiện của các cột tham gia:
SELECT film.title, film_id -- film_id is not prefixed
FROM film
JOIN film_actor USING (film_id)
WHERE ...
Để minh họa, hãy làm như trên với BẬT , chúng tôi sẽ phải viết:
SELECT film.title, film.film_id -- film.film_id is required here
FROM film
JOIN film_actor ON (film.film_id = film_actor.film_id)
WHERE ...
Lưu ý film.film_id
trình độ trong SELECT
mệnh đề. Sẽ không hợp lệ nếu chỉ nói film_id
vì điều đó sẽ tạo ra sự mơ hồ:
LỖI 1052 (23000):Cột 'film_id' trong danh sách trường không rõ ràng
Đối với select *
, cột kết hợp xuất hiện trong kết quả được đặt hai lần với ON
trong khi nó chỉ xuất hiện một lần với USING
:
mysql> create table t(i int);insert t select 1;create table t2 select*from t;
Query OK, 0 rows affected (0.11 sec)
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
Query OK, 1 row affected (0.19 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select*from t join t2 on t.i=t2.i;
+------+------+
| i | i |
+------+------+
| 1 | 1 |
+------+------+
1 row in set (0.00 sec)
mysql> select*from t join t2 using(i);
+------+
| i |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
mysql>