यह ज्यादातर वाक्यात्मक चीनी है, लेकिन कुछ अंतर उल्लेखनीय हैं:
चालू दोनों में से अधिक सामान्य है। एक कॉलम पर टेबल, कॉलम का एक सेट और यहां तक कि एक शर्त भी शामिल हो सकता है। उदाहरण के लिए:
SELECT * FROM world.City JOIN world.Country ON (City.CountryCode = Country.Code) WHERE ...
उपयोग करना तब उपयोगी होता है जब दोनों तालिकाएं ठीक उसी नाम का कॉलम साझा करती हैं जिस पर वे जुड़ते हैं। इस मामले में, कोई कह सकता है:
SELECT ... FROM film JOIN film_actor USING (film_id) WHERE ...
एक और अच्छी बात यह है कि किसी को ज्वाइनिंग कॉलम को पूरी तरह से क्वालिफाई करने की जरूरत नहीं है:
SELECT film.title, film_id -- film_id is not prefixed
FROM film
JOIN film_actor USING (film_id)
WHERE ...
उदाहरण के लिए, उपरोक्त को चालू . के साथ करने के लिए , हमें लिखना होगा:
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 ...
film.film_id
पर ध्यान दें SELECT
. में योग्यता खंड। केवल film_id
. कहना गलत होगा क्योंकि इससे अस्पष्टता पैदा होगी:
त्रुटि 1052 (23000):फ़ील्ड सूची में कॉलम 'film_id' अस्पष्ट है
जहां तक select *
, ज्वाइनिंग कॉलम ON
. के साथ परिणाम सेट में दो बार दिखाई देता है जबकि यह 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>