12

آموزش Recursive Query

تعداد بازدید
167
زمان مطالعه
7 دقیقه
بـروز رسانـی
1402/06/31
پرینت مقاله
اشتراک گذاری

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

1  

✔️هر سطر از جدول فوق مشخص کننده اطلاعات کارمند از قبیل شناسه کارمند ، شناسه مدیر ، نام کارمند و نام خانوادگی کارمند است
✔️به کارمند شماره 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

1

همانطور که مشاهده میکنید خروجی پرس و جوی فوق تنها مدیر مستقیم هر کارمند را استخراج میکند، برای استخراج مدیر مدیر هر کارمند باید از 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

????????????خروجی پرس و جوی فوق بطور  کامل در فایل زیر می باشد ????????????????????

1

 

 

برای مشاهده کامل مطلب کلیک کنید

دیدگاهتان را بنویسید

آیا این مقاله مفید بود؟

از ۱ تا ۵ چه امتیازی می‌دهید؟

میانگین امتیاز از رای

اولین نفر باشید که رای میدهد!

تماس با پشتیبانی
فرداوراکل
این فیلد برای اعتبار سنجی است و باید بدون تغییر باقی بماند .