SQL Self Join
زبان SQL وقتی بخوایم یک جدول رو با خودش join کنیم (یعنی ردیفهای داخل همون جدول رو با هم مقایسه کنیم)، از SELF JOIN استفاده میکنیم.
در واقع Self Join یک JOIN عادیه، فقط جدول یک بار با اسم مستعار دیگه به خودش وصل میشه.
🔹 ساختار کلی
-
همون جدول دوبار استفاده میشه، ولی با Aliasهای متفاوت (
a
وb
). -
شرط
WHERE
مشخص میکنه کدوم رکوردها با هم مطابقت داده بشن.
🔹 مثال ساده
جدول: Employees
id | name | manager_id |
---|---|---|
1 | Ali | NULL |
2 | Sara | 1 |
3 | Reza | 1 |
4 | Narges | 2 |
اینجا هر کارمند یک manager_id
داره که به id
یکی دیگه از کارمندها اشاره میکنه.
کوئری:
📌 خروجی:
Employee | Manager |
---|---|
Sara | Ali |
Reza | Ali |
Narges | Sara |
توضیح: جدول Employees با خودش JOIN شده تا مشخص بشه هر کارمند مدیرش کیه.
🔹 مثال دیگر (مقایسه ردیفها)
فرض کنید جدول Products داریم:
id | name | price |
---|---|---|
1 | Laptop | 25000 |
2 | Mouse | 200 |
3 | Keyboard | 500 |
4 | Monitor | 3000 |
میخوایم محصولاتی رو پیدا کنیم که قیمت مشابه دارن (خودشون به خودشون مقایسه بشن):
✅ نکات مهم
-
Self Join همیشه نیاز به Alias داره تا بتونیم تشخیص بدیم کدوم ستون به کدوم نسخه از جدول مربوطه.
-
معمولا برای کارهایی مثل پیدا کردن سلسلهمراتب (مدیر–کارمند) یا مقایسه ردیفها در یک جدول استفاده میشه.
-
Self Join میتونه از هر نوع JOIN باشه (INNER, LEFT, RIGHT).