PostgreSQL与Oracle的sql区别有哪些

67次阅读
没有评论

共计 2596 个字符,预计需要花费 7 分钟才能阅读完成。

本篇内容介绍了“PostgreSQL 与 Oracle 的 sql 区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.rownum(1)Oracle 分页查询使用 rownum,PostgreSQL 使用 limit offsetOraclePostgreSQLselect  *  from (select rownum r,e.* from emp e where rownum =5) t where r select  * from emp limit 5 offset 0;(2)Oracle 中 rownum=1,PostgreSQL 中使用 limit 1OraclePostgreSQLselect  *  from emp where rownum = 1;select  * from emp limit 1;(3)Oracle 中序号列 rownum,PostgreSQL 使用窗口函数 OraclePostgreSQLselect  rownum,t.*  from emp t;select row_number() over(), t.* from emp t;2. 系统日期 OraclePostgreSQLSYSDATEcurrent_timestamp, current_date3.delete 语句

Oracle delete 语句可以没有 from,pg 必须要有 from

OraclePostgreSQLdelete from emp where empno = xxx;

delete emp where empno = xxxdelete from emp where empno = xxx4. 类型自动转换

Oracle 支持类型自动转换,例如数字自动换换为字符串等;PG 中需要显示转换,或者添加 CAST

5. 子查询别名

PostgreSQL 在 from 关键字后的子查询必须要有别名,Oralce 可以没有。

6. group by having

PG having 语句必须在 group by 之后,oracle 可以在 group by 之前

7. 递归查询

Oracle 中使用 start with … connect by…, PG 中使用 with recusive

OraclePostgreSQLselect *
from larearrelation
where rearedgens = 1
and rearflag = 1
and rearlevel =‘01’
connect by prior agentcode = rearagentcode
start with rearagentcode =‘10032226’;
with recursive rs as (
select * from larearrelation where rearagentcode =‘10032226’
union all
select a. from larearrelation a, rs where a.rearagentcode = rs.agentcode
)
select  * from rs where rearedgens = 1 and rearflag =‘1’and rearlevel =‘01’8.update 语句别名

postgresql 中 update 语句时,set 的字段不能有别名

OraclePostgreSQLupdate emp t set t.name =‘xxx’where t.empno = 2update emp set name =‘xxx’where empno = 29. 日期相减

oracle 日期相减自动转换为数字,结果为相差的天数。
pg 日期相减为 interval 类型,得到相差天数需要进行类型转换

10. 递归查询中的 level

oracle 的递归查询中 level 表示查询深度(或者递归层次),在 PG 中没有此含义的关键字,需要自行在 with recursive 实现

OraclePostgreSQLselect  max(level) from larearrelation
where rearedgens = 1
and rearflag = 1
and rearlevel =‘01’
connect by prior agentcode = rearagentcode
start with rearagentcode =‘10032226’;
with recursive rs as (
select larearrelation., 1 depth from larearrelation where rearagentcode =‘10032226’
union all
select a./*, rs.depth + 1 depth from larearrelation a, rs where a.rearagentcode = rs.agentcode
)
select max(rs.depth) from rs where rearedgens = 1 and rearflag =‘1’and rearlevel =‘01’11. 序列的调用 OraclePostgreSQLselect seqname.nextval from dual;select nextval(‘seqname’)12. 外连接

Oralce 外连接支持使用 (+),PostgreSQL 需使用 left jion 或者 right join 标准 sql 语法

13.distinct 去重复

oracle 支持 unique 关键字去重复,pg 中只能使用 distinct

14. 字符串分割 OraclePostgreSQLlistaggstring_agg15. 集合相减 OraclePostgreSQLMinusexcept16.null 与”

null 和’’在 oracle 中是一致的,最终都会存储为 null,在 PG 中会进行区分

17. 不等于

Oracle 中 ! =,操作符中间允许有空格,PG 中不可以

18. 别名

PG 中无效的别名,可以尝试加 as 关键字,例如 name

19. 正则表达式 OraclePostgreSQLSELECT REGEXP_SUBSTR(‘17,20,23’,’[^,]+’,1,1,’i’)  FROM DUAL;select (regexp_matches(‘17,20,23’,‘[^,]+’))[1]20. 字段大小写

oracle 字段名大写,PG 字段名小写

“PostgreSQL 与 Oracle 的 sql 区别有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-26发表,共计2596字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)