度量快速开发平台-专业、快速的软件定制快开平台

标题: oracle中with as子句的用法小结 [打印本页]

作者: 万望    时间: 2020-4-28 20:58
标题: oracle中with as子句的用法小结

with as也叫做子查询部分,首先定义一个sql片段,该sql片段会被整个sql语句所用到,为了让sql语句的可读性更高些,作为提供数据的部分,也常常用在union等集合操作中。with as最大的好处就是适当的提高代码可读性,而且如果with子句在后面要多次使用到,这可以大大的简化SQL。

关于with as子句的用法,下面两个例子看看就OK了:

  1. -- 例子1
  2. WITH dept_costs AS
  3. (SELECT d.department_name, SUM(e.salary) AS dept_total
  4.     FROM employees e, departments d
  5.    WHERE e.department_id = d.department_id
  6.    GROUP BY d.department_name),
  7. avg_cost AS
  8. (SELECT SUM(dept_total) / COUNT(*) AS dept_avg FROM dept_costs)
  9. SELECT *
  10.   FROM dept_costs
  11. WHERE dept_total > (SELECT dept_avg FROM avg_cost)
  12. ORDER BY department_name;
  13. -- 例子2
  14. WITH sql1 AS
  15. (SELECT to_char(a) s_name FROM test_tempa),
  16. sql2 AS
  17. (SELECT to_char(b) s_name
  18.     FROM test_tempb
  19.    WHERE NOT EXISTS (SELECT s_name FROM sql1 WHERE rownum = 1))
  20. SELECT *
  21.   FROM sql1
  22. UNION ALL
  23. SELECT *
  24.   FROM sql2
  25. UNION ALL
  26. SELECT 'no records'
  27.   FROM dual
  28. WHERE NOT EXISTS (SELECT s_name FROM sql1 WHERE rownum = 1) AND NOT EXISTS (SELECT s_name
  29.                                                                                FROM sql2
  30.                                                                               WHERE rownum = 1);
复制代码







欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://plat.delit.cn/) Powered by Discuz! X3.2