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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 905|回复: 0
打印 上一主题 下一主题

[分享] oracle中with as子句的用法小结

[复制链接]

348

主题

3572

帖子

9299

积分

论坛元老

Rank: 8Rank: 8

积分
9299
跳转到指定楼层
楼主
发表于 2020-4-28 20:58:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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);
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-1 20:35 , Processed in 0.124280 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表