精彩文章免费看

在SQL Server中的SQL

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;
    
    最后编辑于:2017-12-06 02:58