[برای نمایش لینک باید عضو شوید. ]؟

Query ای که در دل query دیگر گنجانده شده باشد، subquery نامیده می شود.

فرض بگیرید می خواهیم تمامی کارکنانی که درآمد آن ها از حد متوسط بالاتر است را بازایابی کنید. برای این منظور ابتدا باید میانگین درآمد تمامی کارکنان را با استفاده از تابع AVG بدست آورده، سپس درآمد کارکنان را با درآمد محاسبه شده مقایسه کنید. این کار با استفاده از subquery امکان پذیر می باشد.

در مثال زیر sub query ابتدا میانگین درآمد کارکنان محاسبه کرده، سپس query اصلی اجرا می شود.

Select * from emp where sal > (select avg(sal) from emp);‎



دنبال رو مثال قبلی می خواهیم name و empno کارمندی که بیشترین درآمد را دارد، مشاهده کنیم.

Select * from emp where sal = (select max(sal) from emp);‎



برای مشاهده ی درآمدی که در رده ی دوم قرار می گیرد.

Select max(sal) from emp where

‎ sal < (select max(sal) from emp);‎



به همین شیوه برای مشاهده ی سومین بیشترین درآمد به ترتیب زیر عمل می کنیم.

Select max(sal) from emp where ‎

‎ sal < (select max(sal) from emp Where ‎

‎ sal < (select max(sal) from emp));‎



می خواهیم تعداد کارکنانی که درآمد آن ها از سطح متوسط بالاتر است را مشاهده کنیم.

Select count(*) from emp where

‎ sal > (select max(sal) from emp);‎



حال می خواهیم آن دسته از کارکنانی که در Hyderabad فعالیت دارند را مشاهده کنیم. همان طور که بخاطر دارید، emp و dept در جدولی به نام deptno با هم ترکیب می شوند و ستون city در جدول dept قرار دارد. کارکن مورد نظر در آن شهری فعالیت دارد که دپارتمان در آن واقع شده است.

Select * from emp where deptno

‎ in (select deptno from dept where city=’HYD’);‎



می توان از subquery در عبارت FROM دستور SELECT استفاده کرد.

برای مثال query زیر پنچ درآمدی که از نظر سطح در رده اول تا پنجم قرار می گیرند را از جدول employees بازیابی می کند.

Select sal from (select sal from emp order sal desc) ‎

‎ where rownum <= 5;‎



برای مشاهده ی حاصل جمع درآمد دپارتمان، می توان query زیر را نوشت.

Select sum(sal) from emp group by deptno;‎



اکنون برای بازیابی میانگین کل حقوق دپارتمان می توان از sub query در عبارت FROM استفاده کرد.

select avg(depttotal) from (select sum(sal) as depttotal from emp group by deptno);‎



عبارت WITH

عبارت WITHصرفا یک اسم به قطعه (block) query subتخصیص می دهد که می توان در چندین مکان مختلف در query اصلی به آن اشاره کرد.

میانگین کل درآمد کارکنان دپارتمان را می توان در ویرایش 9i پایگاه داده ی oracle با استفاده از عبارت گفته شده بدین ترتیب بدست آورد.

WITH

‎ DEPTOT AS (select sum(sal) as dsal from emp ‎

‎ group by deptno)‎

‎ select avg(dsal) from deptot;


برای دیدن کل مقاله [برای نمایش لینک باید عضو شوید. ] می توانید روی لینک داده شده کلیک کنید