oracle和sqlserver的差异

来源:互联网 发布:淘宝店名 编辑:程序博客网 时间:2024/04/28 18:32

                                                          oracle和sqlserver的差异

一:子查询
1:别名
A:oracle
Oracle不要求强制在结果集后添加别名,
但添加别名不支持 as mm形式
代码如:
select count(*) from (select * from a)
或者select count(*) from (select * from a) mm
对结果集进行总数计算
B:
sqlserver要求强制在结果集后添加别名,别名形势可以为as a
或者 a
代码如下
select count(*)
from (select * from a) mm
或者
select count(*)
from (select * from a) as mm

2:order by
A:oracle
oracle中支持在子查询中使用order by
B:Mssql
Mssql中不支持在子查询中使用order by
如果使用会报如下错误:
服务器: 消息 1033,级别 15,状态 1,行 5
除非同时指定了 TOP,否则 ORDER BY 子句在视图、
内嵌函数、派生表和子查询中无效。
3:group by
A:oracle
oracle支持在子查询中使用group by
而且即使在子句中错误使用group by,并不影响子查询的使用
和正确性。
如下代码
select count(*) from
 (
 select * from a group by name
)  mm
这个sql语句,如果单独执行里面的子句
select * from a by name
分析器会报错。
错误信息:
 ORA-00979:不是GROUP BY表达式
如果执行整个sql语句,则正确执行。
我认为此处oracle内部对上述语句做了调整,调整结果:
select count(*) from
 (
 select name
   from a group by name
)  mm
B:Mssql
Mssq也支持在子查询中使用group by
如果在子句中错误使用group by,整个子查询也会报错
如下代码
select count(*) from
 (
 select *
   from a group by name
)  mm
执行整个语句和执行select *   from a group by name
报的错误一致,错误如下:
服务器: 消息 8120,级别 16,状态 1,行 1
列 'name' 在选择列表中无效,因为该列既不包含在聚合函数中,
也不包含在 GROUP BY 子句中。
此处,Mssql和oracle相比,智能性不足的特点暴露无疑,不过
倒也可以纠正程序员的粗心,Mssql这帮开发者估计开发的时候都
没有想到这个无心插柳的疗效。 

原创粉丝点击