আমার কাছে 2 টি টেবিল রয়েছে:
> SELECT * FROM table_a;
+------+------+
| id | name |
+------+------+
| 1 | row1 |
| 2 | row2 |
+------+------+
> SELECT * FROM table_b;
+------+------+------+
| id | name | aid |
+------+------+------+
| 3 | row3 | 1 |
| 4 | row4 | 1 |
| 5 | row5 | NULL |
+------+------+------+
অন্তর্ভুক্ত যোগদান দুটি টেবিলের যত্ন করে
অন্তর্ভুক্ত যোগদান উভয় টেবিলের জন্য যত্নশীল, তাই উভয় টেবিলের যদি থাকে তবে আপনি কেবল সারি পান। যদি একাধিক মিলের জুড়ি থাকে তবে আপনি একাধিক সারি পাবেন।
> SELECT * FROM table_a a INNER JOIN table_b b ON a.id=b.aid;
+------+------+------+------+------+
| id | name | id | name | aid |
+------+------+------+------+------+
| 1 | row1 | 3 | row3 | 1 |
| 1 | row1 | 4 | row4 | 1 |
+------+------+------+------+------+
আপনি যদি অর্ডারটি উল্টে দেন তবে তাতে যোগ দিতে কোনও পার্থক্য নেই, কারণ এটি উভয় টেবিলের যত্ন করে:
> SELECT * FROM table_b b INNER JOIN table_a a ON a.id=b.aid;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 4 | row4 | 1 | 1 | row1 |
+------+------+------+------+------+
আপনি একই সারিগুলি পান তবে কলামগুলি আলাদা ক্রমে রয়েছে কারণ আমরা সারণিগুলিকে আলাদা ক্রমে উল্লেখ করেছি।
বাম জয়েন্টগুলি কেবল প্রথম টেবিলের বিষয়ে চিন্তা করে
বাম যোগদান আপনি যে প্রথম টেবিলটি দিয়েছেন তা যত্নশীল এবং দ্বিতীয়টির বিষয়ে খুব বেশি চিন্তা করে না, তাই আপনি দ্বিতীয় টেবিলে কোনও সারি না থাকলেও আপনি সর্বদা প্রথম টেবিল থেকে সারিগুলি পান:
> SELECT * FROM table_a a LEFT JOIN table_b b ON a.id=b.aid;
+------+------+------+------+------+
| id | name | id | name | aid |
+------+------+------+------+------+
| 1 | row1 | 3 | row3 | 1 |
| 1 | row1 | 4 | row4 | 1 |
| 2 | row2 | NULL | NULL | NULL |
+------+------+------+------+------+
উপরে আপনি টেবিল_এর সমস্ত সারি দেখতে পাবেন যদিও তাদের কয়েকটি টেবিল বিতে কোনও কিছুর সাথে মেলে না, তবে টেবিল_ বিয়ের সমস্ত সারি নয় - কেবল টেবিল_এতে কোনও কিছুর সাথে মেলে।
যদি আমরা টেবিলগুলির ক্রমটি বিপরীত করি, তবে বাম জয়েন্টগুলি অন্যরকম আচরণ করে:
> SELECT * FROM table_b b LEFT JOIN table_a a ON a.id=b.aid;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 4 | row4 | 1 | 1 | row1 |
| 5 | row5 | NULL | NULL | NULL |
+------+------+------+------+------+
এখন আমরা টেবিল_ বি এর সমস্ত সারি পাই, তবে কেবল টেবিল_এর সারি মিলে।
ডান যোগদান করুন শুধুমাত্র দ্বিতীয় সারণির জন্য যত্নশীল
a RIGHT JOIN b
আপনি ঠিক একই সারি পায় b LEFT JOIN a
। পার্থক্যটি হ'ল কলামগুলির ডিফল্ট ক্রম।
> SELECT * FROM table_a a RIGHT JOIN table_b b ON a.id=b.aid;
+------+------+------+------+------+
| id | name | id | name | aid |
+------+------+------+------+------+
| 1 | row1 | 3 | row3 | 1 |
| 1 | row1 | 4 | row4 | 1 |
| NULL | NULL | 5 | row5 | NULL |
+------+------+------+------+------+
এটি একই সারিগুলির মতো table_b LEFT JOIN table_a
, যা আমরা বাম যোগদানের অংশে দেখেছি।
একইভাবে:
> SELECT * FROM table_b b RIGHT JOIN table_a a ON a.id=b.aid;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 4 | row4 | 1 | 1 | row1 |
| NULL | NULL | NULL | 2 | row2 |
+------+------+------+------+------+
একই সারি হয় table_a LEFT JOIN table_b
।
কোনও যোগ দেওয়া মোটেই আপনাকে সমস্ত কিছুর অনুলিপি দেয় না
যোগ দানের অংশ নেই: আপনি যদি টেবিলগুলি JOIN বিনা বিন্দুতে লিখে থাকেন, কেবলমাত্র কমা দ্বারা পৃথক করা, আপনি প্রথম টেবিলের প্রতিটি সারি দ্বিতীয় সারণির প্রতিটি সারিটির পাশে, প্রতিটি সম্ভাব্য সংমিশ্রণে পাবেন:
> SELECT * FROM table_b, table_a;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 3 | row3 | 1 | 2 | row2 |
| 4 | row4 | 1 | 1 | row1 |
| 4 | row4 | 1 | 2 | row2 |
| 5 | row5 | NULL | 1 | row1 |
| 5 | row5 | NULL | 2 | row2 |
+------+------+------+------+------+
(এটি আমার ব্লগ পোস্ট থেকে এসকিউএল যোগদানের ধরণের উদাহরণসমূহ )