sybase与oracle区别之Sql语法篇
1、对null和空字符串的处理
Oracle:没有空字符串,如果你将某值赋值为空字符,oracle会自动存成null
Sybase: 区别空字符串和null
如果想查询某个字段不为空的数据
sybase可以写为:
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
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'
,