Left Join এবং Cross Join হল SQL এবং LINQ-এ ব্যবহৃত দুটি ভিন্ন ধরনের জয়েন অপারেশন। এগুলি ডেটাবেস থেকে ডেটা যুক্ত করার জন্য ব্যবহৃত হয়, তবে তাদের কাজের ধরন এবং ফলাফল ভিন্ন।
Left Join হল একটি জয়েন টাইপ যেখানে প্রথম টেবিলের সব রেকর্ড (বাম পাশে থাকা টেবিল) এবং দ্বিতীয় টেবিলের সেগুলি রেকর্ড নেয়া হয় যা প্রথম টেবিলের সঙ্গে মেলে। যদি দ্বিতীয় টেবিলে কোনও মেলানো রেকর্ড না থাকে, তবে সেই ক্ষেত্রের জন্য NULL মান ব্যবহার করা হয়। এটি সাধারণত Left Outer Join নামে পরিচিত।
Left Join এর মাধ্যমে আপনি বাম টেবিলের সমস্ত ডেটা এবং মিলে যাওয়া ডান টেবিলের ডেটা পেতে পারেন।
SELECT table1.column1, table1.column2, table2.column1
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
এখানে, table1 এবং table2 হল দুটি টেবিল, এবং common_field হল সেই ফিল্ড যা উভয় টেবিলে মিলিয়ে রেকর্ডগুলো জয়েন করা হয়।
ধরা যাক, আমাদের দুটি টেবিল আছে: Customers এবং Orders। আমরা Customers টেবিলের সমস্ত ডেটা এবং তাদের Orders টেবিল থেকে অর্ডার সম্পর্কিত ডেটা বের করতে চাই।
CustomerID | CustomerName |
---|---|
1 | Alice |
2 | Bob |
3 | Charlie |
OrderID | CustomerID | OrderAmount |
---|---|---|
101 | 1 | 500 |
102 | 2 | 700 |
SQL Query:
SELECT Customers.CustomerID, Customers.CustomerName, Orders.OrderAmount
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
ফলাফল:
CustomerID | CustomerName | OrderAmount |
---|---|---|
1 | Alice | 500 |
2 | Bob | 700 |
3 | Charlie | NULL |
এখানে, Charlie গ্রাহকের কোন অর্ডার নেই, তাই তার জন্য OrderAmount NULL হয়ে গেছে।
Cross Join হল একটি জয়েন টাইপ যা দুটি টেবিলের মধ্যে Cartesian Product তৈরি করে। অর্থাৎ, এটি প্রথম টেবিলের প্রতিটি রেকর্ডের সঙ্গে দ্বিতীয় টেবিলের প্রতিটি রেকর্ড যুক্ত করে। এই জয়েনের ফলে যে সংখ্যা তৈরি হয় তা হবে প্রথম টেবিলের রেকর্ডের সংখ্যা গুণ দ্বিতীয় টেবিলের রেকর্ডের সংখ্যা।
Cross Join এর মাধ্যমে আপনি কোন শর্ত ছাড়াই সমস্ত সম্ভাব্য রেকর্ডের সংমিশ্রণ দেখতে পাবেন।
SELECT table1.column1, table2.column1
FROM table1
CROSS JOIN table2;
এখানে, table1 এবং table2 হল দুটি টেবিল। CROSS JOIN ব্যবহারের মাধ্যমে আমরা উভয় টেবিলের সব রেকর্ডের সংমিশ্রণ পেয়ে থাকি।
ধরা যাক, আমাদের দুটি টেবিল আছে: Colors এবং Sizes। আমরা Colors এবং Sizes টেবিলের মধ্যে সব সম্ভাব্য সংমিশ্রণ দেখতে চাই।
Color |
---|
Red |
Green |
Blue |
Size |
---|
Small |
Medium |
Large |
SQL Query:
SELECT Colors.Color, Sizes.Size
FROM Colors
CROSS JOIN Sizes;
ফলাফল:
Color | Size |
---|---|
Red | Small |
Red | Medium |
Red | Large |
Green | Small |
Green | Medium |
Green | Large |
Blue | Small |
Blue | Medium |
Blue | Large |
এখানে, Colors এবং Sizes টেবিলের সমস্ত রেকর্ডের সংমিশ্রণ তৈরি হয়েছে।
LINQ-এ Left Join করার জন্য Group Join পদ্ধতি ব্যবহার করা হয়। এটি মূলত Left Outer Join এর সমতুল্য। এখানে একটি উদাহরণ দেওয়া হল:
var leftJoin = from customer in customers
join order in orders on customer.CustomerID equals order.CustomerID into customerOrders
from order in customerOrders.DefaultIfEmpty()
select new
{
customer.CustomerID,
customer.CustomerName,
OrderAmount = order?.OrderAmount ?? 0
};
foreach (var item in leftJoin)
{
Console.WriteLine($"CustomerID: {item.CustomerID}, CustomerName: {item.CustomerName}, OrderAmount: {item.OrderAmount}");
}
এখানে, DefaultIfEmpty() ব্যবহার করা হয়েছে যাতে NULL মান দেয়া যায় যদি কোনো অর্ডার না থাকে।
LINQ-এ Cross Join তৈরি করার জন্য SelectMany পদ্ধতি ব্যবহার করা হয়। এটি প্রথম টেবিলের সব রেকর্ডের সাথে দ্বিতীয় টেবিলের সব রেকর্ডের সংমিশ্রণ তৈরি করে।
var crossJoin = from color in colors
from size in sizes
select new { color, size };
foreach (var item in crossJoin)
{
Console.WriteLine($"Color: {item.color}, Size: {item.size}");
}
এখানে, প্রথম টেবিল colors এবং দ্বিতীয় টেবিল sizes এর সব রেকর্ডের সংমিশ্রণ তৈরি হয়েছে।
common.read_more