sybase與oracle區別之Sql語法篇
1、對null和空字符串的處理
Oracle:沒有空字符串,如果你將某值賦值為空字符,oracle會自動存成null
Sybase: 區別空字符串和null
如果想查詢某個字段不為空的數據
sybase可以寫為: www.2cto.com
select * from table where (columA is not null and columA <>'')
但是oracle如果這樣寫,是任何值都查詢不到的。因為不管culumA是否為null,
columA <>''或者columA='' 永遠返回false,
可以這樣寫:select * from table where columA is not null
總結在oracel中可以取消對空串的考慮。特別是兼容兩種數據庫的程序應注意這一點。
另:A<>'delete' 這裡不包含null,應改寫為 (A<>'delete' or A is null)
2、update select
在 SQL 中,表連接(left join、right join、inner join 等)常常用於 select 語句,其實在 SQL 語法中,這些連接也是可以用於 update 和 delete 語句的,在這些語句中使用 join 還常常得到事半功倍的效果。
Update T_OrderForm SET T_OrderForm.SellerID =B.L_TUserID
FROM T_OrderForm A LEFT JOIN T_ProductInfo B ON B.L_ID=A.ProductID
www.2cto.com
oracle:
UPDATE A SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID) WHERE ID IN (SELECT B.ID FROM B WHERE A.ID = B.ID)
sybase:
UPDATE table_A SET a.A1 = b.B1, a.A2 = b.B2, a.A3 = b.B3 FROM table_A a JOIN table_B b ON a.ID = b.ID and a.name='XXX' and b.B2='XXX'