PostgreSQL與Oracle的sql差異
1.rownum
(1)Oracle分頁查詢使用rownum,PostgreSQL使用limit offset
Oracle | PostgreSQL |
---|---|
select * from (select rownum r,e.* from emp e where rownum <=5) t where r>0; | select * from emp limit 5 offset 0; |
(2)Oracle中rownum=1,PostgreSQL中使用limit 1
Oracle | PostgreSQL |
---|---|
select * from emp where rownum = 1; | select * from emp limit 1; |
(3)Oracle中序號列rownum,PostgreSQL使用視窗函式
Oracle | PostgreSQL |
---|---|
select rownum,t.* from emp t; | select row_number() over(), t.* from emp t; |
2.系統日期
Oracle | PostgreSQL |
---|---|
SYSDATE | current_timestamp, current_date |
3.delete語句
Oracle delete語句可以沒有from,pg必須要有from
Oracle | PostgreSQL |
---|---|
delete from emp where empno = xxx;
delete emp where empno = xxx | delete from emp where empno = xxx |
4.型別自動轉換
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
Oracle | PostgreSQL |
---|---|
select *
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的欄位不能有別名
Oracle | PostgreSQL |
---|---|
update emp t set t.name = ‘xxx’ where t.empno = 2 | update emp set name = ‘xxx’ where empno = 2 |
9. 日期相減
oracle日期相減自動轉換為數字,結果為相差的天數。
pg日期相減為interval型別,得到相差天數需要進行型別轉換
10.遞迴查詢中的level
oracle的遞迴查詢中level表示查詢深度(或者遞迴層次),在PG中沒有此含義的關鍵字,需要自行在with recursive實現
Oracle | PostgreSQL |
---|---|
select 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.序列的呼叫
Oracle | PostgreSQL |
---|---|
select seqname.nextval from dual; | select nextval(‘seqname’) |
12.外連線
Oralce外連線支援使用 (+), PostgreSQL需使用left jion或者right join標準sql語法
13.distinct去重複
oracle支援unique關鍵字去重複,pg中只能使用distinct
14.字串分割
Oracle | PostgreSQL |
---|---|
listagg | string_agg |
15.集合相減
Oracle | PostgreSQL |
---|---|
Minus | except |
16.null與”
null和’’在oracle中是一致的,最終都會儲存為null,在PG中會進行區分
17.不等於
Oracle中 ! =,< >操作符中間允許有空格,PG中不可以
18.別名
PG中無效的別名,可以嘗試加as關鍵字,例如name
19.正規表示式
Oracle | PostgreSQL |
---|---|
SELECT REGEXP_SUBSTR(‘17,20,23’,’[^,]+’,1,1,’i’) FROM DUAL; | select (regexp_matches(‘17,20,23’, ‘[^,]+’))[1] |
20.欄位大小寫
oracle欄位名大寫,PG欄位名小寫
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69956102/viewspace-2666880/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之五:函式的差異(五)筆記SQLOracle函式
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之五:函式的差異(三)筆記SQLOracle函式
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之五:函式的差異(一)筆記SQLOracle函式
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之一:外連線筆記SQLOracle
- openGauss資料與PostgreSQL的差異對比SQL
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之四:特殊字元和符號筆記SQLOracle字元符號
- .net 2.0 訪問Oracle --與Sql Server的差異,注意事項,常見異常OracleSQLServer
- ORACLE與MYSQL程式碼開發差異OracleMySql
- [Oracle] UNIX與Windows 2000上Oracle的差異(III)OracleWindows
- Oracle與GreatSQL差異:更改唯一索引列OracleSQL索引
- 【譯】框架與庫的差異框架
- Oracle 8i 與 oracle 9 下 RMAN 中 CROSSCHECK 使用的差異OracleROS
- Oracle中exists和in的效能差異Oracle
- TiDB與MySQL的SQL差異及執行計劃簡析TiDBMySql
- Oracle10g與Oracle11g中PASSWORD_LIFE_TIME的差異Oracle
- SQL Server 2008差異備份與新檔案SQLServer
- MySQL和PostgreSQL在多表連線演算法上的差異MySql演算法
- SQL server差異備份和還原SQLServer
- 不同資料庫SQL語法差異資料庫SQL
- typeof、instanceof與isPrototypeOf()的差異與聯絡
- 談談 mysql和oracle的使用感受 -- 差異MySqlOracle
- SQL Server 2017 各版本之間的差異SQLServer
- 軟體測試:SVN與Git的差異Git
- 【差異】LENGTH與VSIZE的區別演示
- 反向代理與正向代理差異分析
- 子查詢與join效能差異
- Scala與Java差異(五)之Map與TupleJava
- SQL Server 2008 差異備份的基準SQLServer
- java字串“==”與“equals”的差異及與c#的區別Java字串C#
- [轉載] SQL server 差異備份和還原SQLServer
- SQL Server 2008 使用差異備份SQLServer
- SQL Server SQL語句中的函式呼叫與Oracle SQL語句函式呼叫一個有趣的差別SQLServer函式Oracle
- Python 與 JavaScript 語法差異點PythonJavaScript
- Scala與Java差異(三)之函式Java函式
- resin與jetty解析el表示式差異Jetty
- For Update操作分析——不同Oracle版本之間的差異研究Oracle
- ERP差異來源和差異處理
- 差異化與中心化,QQ小遊戲的機遇中心化遊戲