SQL笔记-递归/树形查询

Oracle递归查询用WITH+UNIONALL。
MySQL用WITHRECURSIVE。
SQLServer和PostgreSQL也用WITH。
建好表,比如employees,插数据。
查部门层级,先写初始查询。
再用UNIONALL/JOIN加子查询。
比如查下属,一层层往上递归。
自己试试看,别光看。

这就是坑。
别信。
别这么干。
立即检查网站安全。

列举一些sql高级查询语句

Oracle集合操作关键点:

UNION返回不重复行集,UNION ALL返回所有行(含重复)。

INTERSECT返回交集行集,MINUS返回差集行集。

优先级:等号同优先级,从左到右计算,用括号改变顺序。

UNION ALL效率高于UNION。

EXISTS vs IN:
EXISTS效率高,子查询小用IN,外层查询小用EXISTS。

EXISTS传常量,IN全匹配。

WITH子句:
重用子查询,提高效率。

必须引用定义的查询,否则报ORA-3 2 03 5
最后一个WITH用右括号分隔,前面WITH定义的可用后面。

MERGE INTO:
更新或插入数据,一次全表扫描。

WHEN MATCHED THEN UPDATE,WHEN NOT MATCHED THEN INSERT。

不能对同一行重复操作,UPDATE不能改连接列。

实操提醒:先理解优先级,用括号控制顺序。