SQL Self Join

زبان SQL وقتی بخوایم یک جدول رو با خودش join کنیم (یعنی ردیف‌های داخل همون جدول رو با هم مقایسه کنیم)، از SELF JOIN استفاده می‌کنیم.

در واقع Self Join یک JOIN عادیه، فقط جدول یک بار با اسم مستعار دیگه به خودش وصل میشه.

🔹 ساختار کلی

SELECT a.column_name, b.column_name FROM table_name a, table_name b WHERE condition;
  • همون جدول دوبار استفاده میشه، ولی با Aliasهای متفاوت (a و b).

  • شرط WHERE مشخص می‌کنه کدوم رکوردها با هم مطابقت داده بشن.

🔹 مثال ساده

جدول: Employees

idnamemanager_id
1AliNULL
2Sara1
3Reza1
4Narges2

اینجا هر کارمند یک manager_id داره که به id یکی دیگه از کارمندها اشاره می‌کنه.

کوئری:

SELECT e.name AS Employee, m.name AS Manager FROM Employees e INNER JOIN Employees m ON e.manager_id = m.id;

📌 خروجی:

EmployeeManager
SaraAli
RezaAli
NargesSara

توضیح: جدول Employees با خودش JOIN شده تا مشخص بشه هر کارمند مدیرش کیه.

🔹 مثال دیگر (مقایسه ردیف‌ها)

فرض کنید جدول Products داریم:

idnameprice
1Laptop25000
2Mouse200
3Keyboard500
4Monitor3000

می‌خوایم محصولاتی رو پیدا کنیم که قیمت مشابه دارن (خودشون به خودشون مقایسه بشن):

SELECT p1.name, p2.name, p1.price FROM Products p1 JOIN Products p2 ON p1.price = p2.price AND p1.id <> p2.id;

نکات مهم

  • Self Join همیشه نیاز به Alias داره تا بتونیم تشخیص بدیم کدوم ستون به کدوم نسخه از جدول مربوطه.

  • معمولا برای کارهایی مثل پیدا کردن سلسله‌مراتب (مدیر–کارمند) یا مقایسه ردیف‌ها در یک جدول استفاده میشه.

  • Self Join می‌تونه از هر نوع JOIN باشه (INNER, LEFT, RIGHT).