استفاده از 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 برای نسخه بعدی
- سعید حسن پور در رفع مشکل Persian Date Picker برای اوراکل ایپکس(اپکس) ۲۱
- حسین ابراهیم زاده در رفع مشکل Persian Date Picker برای اوراکل ایپکس(اپکس) ۲۱
- مهدی جوینی در رفع مشکل Persian Date Picker برای اوراکل ایپکس(اپکس) ۲۱
- محمد در نصب و راه اندازی (Standalone) اوراکل APEX
بایگانی
- اردیبهشت ۱۴۰۱ (۱)
- مرداد ۱۴۰۰ (۱)
- شهریور ۱۳۹۹ (۱)
- بهمن ۱۳۹۸ (۱)
- دی ۱۳۹۸ (۶)
- آذر ۱۳۹۸ (۲۰)
- آبان ۱۳۹۸ (۱۶)
- مهر ۱۳۹۸ (۲۲)
- شهریور ۱۳۹۸ (۲)
- مرداد ۱۳۹۸ (۷)
- تیر ۱۳۹۸ (۹)
- فروردین ۱۳۹۸ (۳)
برچسبها
AOP
APEX
apexrad
captcha
CDN
constraint
ebs
epg
forms
index
injection
longtype
Materialized-view
Oracle Application Express
orclapex
performance
Persian Sort
plsql
session
sql
standalone
variable scope
XE
امنیت
اوراکل
اپکس
ایندکس
ایپکس
بنبست
بهینه ساز
تاریخ شمسی
ترجمه
ترفند
حروف فارسی
داکیومنت
داینامیک
شمسی
مرتب سازی فارسی
نصب
نکته
پلاگین
یونیک