在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;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容