1. 程式人生 > >SQL SERVER-3-order by|型別轉換與日期格式|聯合union

SQL SERVER-3-order by|型別轉換與日期格式|聯合union

 1.order by --order by在sql語句中位置一定是在最後。。

--select ....3>對篩選出的資料再進行列的篩選,select是對列的篩選 --from ....  1> 從資料來源中獲取資料 --where .....2> 從獲取到的資料中篩選一部分符合要求的資料,where是 進行 行的篩選

--1.請從學生表中查詢出每個班的班級Id和班級人數 --從該學生表中統計出每個班的人數。 --當在查詢中使用了group by 分組後,則在select中出現的列,必須是group by 中包含的列或者該列必須在聚合函式中 select tsclassid as 組編號,count(*) 該組中的記錄條數 from TblStudent group by tsclassid

--2 .請從學生表中查詢出每個班的班級Id和班級中男同學的人數 --請統計學生表中的每個班的男同學的人數 select     班級Id=tsclassId,     --這裡的count()會對每一組都進行一次彙總。     男同學人數=count(*) --注意:這裡的count是對每一組的資料進行聚合,統計條數。 from TblStudent where tsgender='男' group by tsclassId

--根據條件查詢 --在分組前對資料篩選使用where --而分組以後,對於那些組保留,那些組不保留,對於組的篩選則使用另外一個關鍵字having --如下,查詢出每個班的班級編號和人數,並且只顯示出來班級人數大於10的班 select     tsclassId as 班級編號,     count(*) as 人數 from TblStudent group by tsclassId having count(*)>10

--having是對分組後的,組進行篩選。 select     tsclassId as 班級編號,     count(*) as 人數 from TblStudent --where ... group by tsclassId having 人數>10 --在這裡不能使用別名"人數",因為sql語句的執行順序是先執行group by 與having然後才執行select,所以 --在執行having的時候select還沒執行,所以這裡不能用select中的列別名

--下面的寫法是錯誤的,sAge必須包含在group by字句中或者包括在聚合函式中 --select tsclassId, count(tsname),tsage from TblStudent group by TsclassId --這樣的寫法是對的 select tsclassId, count(tsname), tsage from TblStudent group by TsclassId,tsage

select     tsgender,     tsaddress,     count(*) from TblStudent --where count(*)>..通過where篩選不能用聚合函式 group by tsgender,tsaddress --having ... >= 通過having進行篩選,只能選擇在分組的select中可以寫的那些列資訊

2.型別轉換與日期格式 --兩個函式 convert()和 cast()

select '考試人數:'+convert(varchar(3),100) select '考試人數:'+cast(100 as varchar(3))

create table MyTest1001 (     autoId int identity(1,1) primary key,     userName varchar(100),     number varchar(100)--這裡使用的是字串 )

insert into MyTest1001 values('A','1') insert into MyTest1001 select 'B','2' union select 'C','3' union select 'D','4' union select 'E','5' union select 'F','9' union select 'G','10' union select 'H','11' union select 'I','12' union select 'J','19' union select 'K','20' union select 'L','21' union select 'M','22'

--如果這裡不進行轉換的話會按照字串格式來排序 select * from MyTest1001 order by cast(number as int) desc --資料庫中,使用try  catch 來捕獲異常 begin try select * from MyTest1001 order by convert(int,number) asc end try begin catch     --..... end catch

--獲取日期格式 select getdate() select convert(char(10),getdate(),120)

--Style ID     Style 格式 --100      mon dd yyyy hh:miAM (或者 PM) --101     mm/dd/yy --102     yy.mm.dd --103     dd/mm/yy --104     dd.mm.yy --105     dd-mm-yy --106     dd mon yy --107     Mon dd, yy --108     hh:mm:ss --109      mon dd yyyy hh:mi:ss:mmmAM(或者 PM) --110     mm-dd-yy --111     yy/mm/dd --112     yymmdd --113      dd mon yyyy hh:mm:ss:mmm(24h) --114     hh:mi:ss:mmm(24h) --120      yyyy-mm-dd hh:mi:ss(24h) --121      yyyy-mm-dd hh:mi:ss.mmm(24h) --126     yyyy-mm-ddThh:mm:ss.mmm(沒有空格) --130     dd mon yyyy hh:mi:ss:mmmAM --131     dd/mm/yy hh:mi:ss:mmmAM

Select CONVERT(varchar(100), GETDATE(), 0)  --05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 1)  -- 05/16/06 Select CONVERT(varchar(100), GETDATE(), 2)  -- 06.05.16 Select CONVERT(varchar(100), GETDATE(), 3)  -- 16/05/06 Select CONVERT(varchar(100), GETDATE(), 4)  -- 16.05.06 Select CONVERT(varchar(100), GETDATE(), 5)  -- 16-05-06 Select CONVERT(varchar(100), GETDATE(), 6)  -- 16 05 06 Select CONVERT(varchar(100), GETDATE(), 7)  -- 05 16, 06 Select CONVERT(varchar(100), GETDATE(), 8)  -- 10:57:46 Select CONVERT(varchar(100), GETDATE(), 9)  -- 05 16 2006 10:57:46:827AM Select CONVERT(varchar(100), GETDATE(), 10)  -- 05-16-06 Select CONVERT(varchar(100), GETDATE(), 11)  -- 06/05/16 Select CONVERT(varchar(100), GETDATE(), 12)  -- 060516 Select CONVERT(varchar(100), GETDATE(), 13)  -- 16 05 2006 10:57:46:937 Select CONVERT(varchar(100), GETDATE(), 14)  -- 10:57:46:967 Select CONVERT(varchar(100), GETDATE(), 20)  -- 2006-05-16 10:57:47 Select CONVERT(varchar(100), GETDATE(), 21)  -- 2006-05-16 10:57:47.157 Select CONVERT(varchar(100), GETDATE(), 22)  -- 05/16/06 10:57:47 AM Select CONVERT(varchar(100), GETDATE(), 23)  -- 2006-05-16 Select CONVERT(varchar(100), GETDATE(), 24)  -- 10:57:47 Select CONVERT(varchar(100), GETDATE(), 25)  -- 2006-05-16 10:57:47.250 Select CONVERT(varchar(100), GETDATE(), 100)  -- 05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 101)  -- 05/16/2006 Select CONVERT(varchar(100), GETDATE(), 102)  -- 2006.05.16 Select CONVERT(varchar(100), GETDATE(), 103)  -- 16/05/2006 Select CONVERT(varchar(100), GETDATE(), 104)  -- 16.05.2006 Select CONVERT(varchar(100), GETDATE(), 105)  -- 16-05-2006 Select CONVERT(varchar(100), GETDATE(), 106)  -- 16 05 2006 Select CONVERT(varchar(100), GETDATE(), 107)  -- 05 16, 2006 Select CONVERT(varchar(100), GETDATE(), 108)  -- 10:57:49 Select CONVERT(varchar(100), GETDATE(), 109)  -- 05 16 2006 10:57:49:437AM Select CONVERT(varchar(100), GETDATE(), 110)  -- 05-16-2006 Select CONVERT(varchar(100), GETDATE(), 111)  -- 2006/05/16 Select CONVERT(varchar(100), GETDATE(), 112)  -- 20060516 Select CONVERT(varchar(100), GETDATE(), 113)  -- 16 05 2006 10:57:49:513 Select CONVERT(varchar(100), GETDATE(), 114)  -- 10:57:49:547 Select CONVERT(varchar(100), GETDATE(), 120)  -- 2006-05-16 10:57:49 Select CONVERT(varchar(100), GETDATE(), 121)  -- 2006-05-16 10:57:49.700 Select CONVERT(varchar(100), GETDATE(), 126)  -- 2006-05-16T10:57:49.827 Select CONVERT(varchar(100), GETDATE(), 130)  -- 18 ???? ?????? 1427 10:57:49:907AM Select CONVERT(varchar(100), GETDATE(), 131)  -- 18/04/1427 10:57:49:920AM

3.聯合union --UN

select '張飛',18,'[email protected]' union all --通過union all就可以把多個結果集聯合到一起,把行聯合在一起。 select '關於',19,'[email protected]'

select 18,'林沖',100 union all --通過union all就可以把多個結果集聯合到一起,把行聯合在一起。 select '武松',19,'[email protected]' --當使用union或者union all的時候必須保證多個結果集中的列的數目一致, --並且對應的列的資料型別得一致,至少得相容。

--使用帶from子句的union select tsname,tsgender,tsage from TblStudent union all select ttname,ttgender,ttage from TblTeacher order by tsage desc

--union與union all的區別 --union all 在進行聯合的時候不會去除重複資料 --而union在聯合的時候會自動去除重複資料 select tsname,tsgender,tsage from TblStudent union select tsname,tsgender,tsage from TblStudent

--通過union實現底部彙總

select     商品名稱,     銷售價格=(sum(銷售數量*銷售價格)) from MyOrders group by 商品名稱 union all   --使用union實現底部彙總 select '所有商品銷售總價:',sum(銷售數量*銷售價格) from MyOrders