🔶 recursive query

در این بخش قصد دارم به معرفی پرس و جوهای بازگشتی (recursive query) پرداخته و همچنین محل کاربرد ، نحوه کار ، قابلیت ها ، و توابعی قابل استفاده در پرس و جوهای بازگشتی را معرفی کنم.
👈 استفاده از پرس و جوهای بازگشتی برای داده هایی امکان پذیر است که ارتباط مابین سطر والد و فرزند در هر سطر مشخص شده باشد لطفا به داده های جدول زیر دقت نمایید 👇👇👇👇👇

✔️هر سطر از جدول فوق مشخص کننده اطلاعات کارمند از قبیل شناسه کارمند ، شناسه مدیر ، نام کارمند و نام خانوادگی کارمند است
✔️به کارمند شماره 101 (Neena Kochhar) توجه کنید ، همانطور که مشاهده میکنید شناسه مدیر این کارمند 100 (Steven King) میباشد
✔️کارمند شماره 102 (Lex De Haan) دارای مدیری با شناسه 100 (Steven King) میباشد ، نتیجه میگیریم که کارمندان 101 و 102 دارای مدیر یکسانی هستند (100)
✔️از مطالب فوق میتوانیم به این نتیجه برسیم که هر مدیر خود یک کارمند است و اگر بخواهیم نام و نام خانوادگی مدیر مستقیم هر کارمند را بدست آوریم باید جدول را با خودش join کنیم ، پرس و جو فوق و خروجی آن به ضورت زیر است 👇👇👇👇👇

,select emp.employee_id
,emp.manager_id
,emp.first_name emp_first_name
,emp.last_name emp_last_name
,mng.first_name mng_first_name
mng.last_name mng_last_name
from employees emp
left join employees mng
on emp.manager_id = mng.employee_id
order by emp.employee_id

همانطور که مشاهده میکنید خروجی پرس و جوی فوق تنها مدیر مستقیم هر کارمند را استخراج میکند، برای استخراج مدیر مدیر هر کارمند باید از join دیگری با جدول کارمندان استفاده کرد ، همچنین برای مدیر دیگری باید دوباره join کرد
🖍 سوال: برای استخراج تمامی مدیران کارمند چند بار باید جدول کارمندان را با خودش join کنیم ؟؟؟
🖍 سوال: با توجه به اینکه ورود اطلاعات توسط کاربران انجام میشود امکان شناسایی سطوح مدیران امکان پذیر است؟؟؟
🖍 سوال: عملکرد پرس و جوهایی که چندین join دارد از لحاظ کارایی چگونه است؟؟؟

💡💡💡راهکار پاسخ به سوالات فوق استفاده از پرس و جوهای بازگشتی است ، نحوه نگارش پرس و جوهای بازگشتی به صورت زیر است

select field1 , field2 , ….

from tbl_name

[where … ]

start with …..

connect by prior child_id_field_name = parent_id_field_name

💡💡💡مثال استفاده از پرس و جوی بازگشتی به صورت زیر میباشد

select emp.employee_id,

        emp.manager_id,

        emp.first_name,

        emp.last_name,

       lpad(‘ ‘, 4 * (level – 1)) || emp.first_name || ‘ ‘ || emp.last_name mng_fl_name

   from employees emp

 from employees emp

connect by prior emp.employee_id = emp.manager_id

💡💡💡خروجی پرس و جوی فوق به شکل زیر میباشد 👇👇👇👇👇

دانلود فایل pdf