استفاده از SQL WITH clause در اوراکل
مورد کاربرد WITH در Oracle:
-
معمولا WITH clause را Subquery Factoring نيز مي نامند
-
استفاده از SQL WITH clause خيلي شبيه استفاده از (Global temporary tables (GTT مي باشد
-
اين تكنيك اغلب براي بهبود افزايش سرعت كوئري براي subqueries پيچيده استفاده مي شود
-
استفاده از SQL WITH clause موقعي كه يك subquery داشته باشيم كه چندين بار تكرار شود
-
هنگام استفاده از recursive queries مفيد مي باشد
-
در Oracle 12c امكان ايجاد فانكشن در داخل WITH clause امكان پذير مي باشد
براي درك بهتر از چند مثال استفاده مي كنيم.
SELECT e.ename AS employee_name,
dc.dept_count AS emp_dept_count
FROM emp e,
(SELECT deptno, COUNT(*) AS dept_count
FROM emp
GROUP BY deptno) dc
WHERE e.deptno = dc.deptno
dc.dept_count AS emp_dept_count
FROM emp e,
(SELECT deptno, COUNT(*) AS dept_count
FROM emp
GROUP BY deptno) dc
WHERE e.deptno = dc.deptno
حال با استفاده از WITH clause در اوراکل
WITH dept_count AS (
SELECT deptno, COUNT(*) AS dept_count
FROM emp
GROUP BY deptno)
SELECT e.ename AS employee_name,
dc.dept_count AS emp_dept_count
FROM emp e,
dept_count dc
WHERE e.deptno = dc.deptno
SELECT deptno, COUNT(*) AS dept_count
FROM emp
GROUP BY deptno)
SELECT e.ename AS employee_name,
dc.dept_count AS emp_dept_count
FROM emp e,
dept_count dc
WHERE e.deptno = dc.deptno
WITH
subquery_name
AS
(the aggregation SQL statement)
SELECT
(query naming subquery_name)
حال مثال زير را در قالب بالا قرار مي دهيم.
WITH sum_sales AS
( select sum(qty) all_sales from sales ),
number_stores AS
( select count(*) nbr_stores from stores ),
sales_by_store AS
( select stor_name, sum(qty) store_sales from
stores natural join sales
group by stor_name)
SELECT stores.stor_name
FROM stores,
sum_sales,
number_stores,
sales_by_store
where store_sales > (all_sales / nbr_stores)
( select sum(qty) all_sales from sales ),
number_stores AS
( select count(*) nbr_stores from stores ),
sales_by_store AS
( select stor_name, sum(qty) store_sales from
stores natural join sales
group by stor_name)
SELECT stores.stor_name
FROM stores,
sum_sales,
number_stores,
sales_by_store
where store_sales > (all_sales / nbr_stores)
4/5 - (1 امتیاز)
جستجو
مطالب اخیر
نظرات اخیر
- محمد در تبدیل تاریخ ها در اوراکل
- مجتبی خالقداد در پلاگین کد امنیتی اوراکل اپکس(ای پکس)
- سعید حسن پور در تبدیل تاریخ ها در اوراکل
- حسین در تبدیل تاریخ ها در اوراکل
- مهرسا سعادت در نقشه راه اوراکل APEX برای نسخه بعدی
برچسبها
AOP
APEX
apexrad
captcha
CDN
constraint
ebs
epg
forms
index
injection
iran
iranoug
longtype
Materialized-view
Oracle Application Express
orclapex
performance
Persian Sort
plsql
session
sql
standalone
variable scope
XE
امنیت
اوراکل
اپکس
ایران
ایندکس
ایپکس
بنبست
بهینه ساز
تاریخ شمسی
ترجمه
ترفند
حروف فارسی
داکیومنت
داینامیک
شمسی
مرتب سازی فارسی
نصب
نکته
پلاگین
یونیک