1.列别名
除了支持oracle的列表名语法形式之外,还支持把列别名置于列名之前,并附加等号:
select emp_name=ename,salary=sal from emp;
2.字符串条件
SQL Server除了支持like关键字、“%”及“_”作为通配符以及使用escape关键字指定转义字符进行模糊匹配查询,还支持正则表达式中的方括号用法,以匹配指定范围内或者方括号所指定集合中的任意单个字符。
SQL Server支持的方括号用法有两种形式,[]与[^],前者用于包含某些字符,后者用于不包含某些字符,举例如下。
- [amd]:表示包含a、m、d三个字符中的任意一个
- [^amd]:表示不包含a、m、d三个字符中的任意一个
- [b-f]:表示英文字母表中b到f之中的任意一个
- [0-9]:表示0到9这10个数字中的任意一个
如查询dept表的dname列中的第一及第二字符为数字,第三个字符为小写英文字母的记录,可以使用如下语句:
select * from dept where dname like '[0-9][0-9][a-z]%';
3.多表连接
对于自然连接,Oracle支持natural join以及using关键字的用法,而SQL Server不支持。
在from子句中使用子查询时,Oracle使用或不使用表别名都是可以的。若使用表别名,则不能附带as关键字。如下面子查询:
#未使用别名
select ename from (select * from emp where deptno=20);
#使用别名
select ename from (select * from emp where deptno=20) e;
但是SQL Server要修必须使用表别名,且附带或不附带as都支持:
select ename from (select * from emp where deptno=20) e;
select ename from (select * from emp where deptno=20) as e;
4.查询排序后的前n行或第n行记录
SQL Server中实现取出表中的前n行,可以使用两种方法:
- top n
- row_number()
SQL Server不支持Oracle中的rownum关键字,而row_number()函数的用法与Oracle相同。
相对于Oracle的实现方式,使用top n的用法,在SQL Server中可以很容易地实现取出表中前n行的目的。如查询emp表中的sal值最高的前3条记录:
select top 3 ename,sal from emp order by sal desc;
如果要查询排序后的第n航记录,可以由前n行结果除去前n-1行结果,如要查询emp表中sql值排名第三的记录:
select a.ename,a.sal from
(select top 3 ename,sal from emp order by sal desc) as a
except
select a.ename,a.sal from
(select top 2 ename,sal from emp order by sal desc) as a;
但是SQL不支持以下做法:
select top 3 ename,sal from emp order by sal desc
except
select top 2 ename,sal from emp order by sal desc;
5.集合运算
对与集合的差运算,Oracle使用minus运算符,而SQL Server使用except运算符。
6.null值在排序(order by)中的处理
在SQL Server的查询中,如果order by附加了asc选项,即升序排序,则null值排在其他非空值之前;如果order by子句附加了desc,则null值排在其他非空值之后,也可以认为在SQL Server中,null值最小,这与Oracle的处理方式正好相反。
7.null处理函数
对应于Oracle的nvl()函数,SQL Server提供的null处理函数为isnull(),其用法与Oracle的nvl()相同。
select ename,sal+isnull(comm,0) from emp;
8.修改表结构
①修改数据类型
Oracle和SQL Server分别使用modify与alter column关键字修改列的数据类型,两者的语法为:
- Oracle:alter table table_name modify column_name datatype
- SQL Server:alter table table_name alter column_name datatype
②修改列名
Oracle使用alter table附加rename column子句来修改列名:
alter table tablename rename column old_column_name to new_column_name;