婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SQL Server 總結復習 (二)

SQL Server 總結復習 (二)

熱門標簽:智能語音外呼系統哪個牌子好 400電話申請需要開戶費嗎 重慶防封電銷機器人供應商 溫州語音外呼系統代理 威海智能語音外呼系統 南京電銷外呼系統運營商 西安青牛防封電銷卡 山西語音外呼系統價格 北京辦理400電話多少
1. 排名函數與PARTITION BY
復制代碼 代碼如下:

--所有數據
SELECT * FROM dbo.student AS a INNER JOIN dbo.ScoreTB AS b ON a.Id = b.stuid
WHERE scorename = '語文'
-------------------------------------------
--ROW_NUMBER() 的使用 生成列從1開始依次增加
-------------------------------------------
SELECT ROW_NUMBER() OVER (ORDER BY B.SCORE DESC) AS ROWNUMBER ,A.NAME, B.SCORE, a.Id
FROM dbo.student AS a INNER JOIN dbo.ScoreTB AS b ON a.Id = b.stuid
WHERE scorename = '語文'
--也可以在后面再加一個order by,則表示前面生成后的全部列又被以最后的列重新排列(排名列值不變)
SELECT ROW_NUMBER() OVER (ORDER BY B.SCORE DESC) AS ROWNUMBER ,A.NAME, B.SCORE, a.Id
FROM dbo.student AS a INNER JOIN dbo.ScoreTB AS b ON a.Id = b.stuid
WHERE scorename = '語文' ORDER BY a.Id
--要在分組統計后使用排名函數,則先進行分組,用cte或嵌套查詢表整出結果集,再用row_number函數處理
WITH b AS
(
SELECT stuid, SUM(score) AS score FROM ScoreTB GROUP BY stuid
)
SELECT * ,ROW_NUMBER() OVER (ORDER BY b.score desc) AS rownumer
FROM dbo.student AS a INNER JOIN b ON a.id = b.stuid
----------------------------------------------------------------------------
--RANK() 用法與ROW_NUMER函數想同,只是在出現order by同級時,排名會設置成一樣,而下一個會根據之前的記錄數生成序號
--例如前面三個是一樣的,那么都是1,下一個則是4,示例略
----------------------------------------------------------------------------
----------------------------------------------------------------------------
--DENSE_RANK() 密集排名 用法與ROW_NUMER、RANK函數相同,只是在生成序號時是連續的,而rank函數生成的序號有可能不連續
--例如前面三個是一樣的,那么都是1,下一個則是2,示例略
----------------------------------------------------------------------------
----------------------------------------------------------------------------
--ntile函數可以對序號進行分組處理。這就相當于將查詢出來的記錄集放到指定長度的數組中,每一個數組元素存放一定數量的記錄。
--為每條記錄生成的序號就是這條記錄所有的數組元素的索引(從1開始)。也可以將每一個分配記錄的數組元素稱為“桶”。
--它有一個參數,用來指定桶數,例如
----------------------------------------------------------------------------
SELECT ntile(2) OVER (ORDER BY B.SCORE DESC) AS GROUPID ,A.NAME, ISNULL(B.SCORE,0) SCORE, a.Id
FROM dbo.student AS a LEFT JOIN dbo.ScoreTB AS b ON a.Id = b.stuid AND scorename = '語文'
--------------------------------------------------------------------------
--PARTITION BY 類似于向排名函數應用一個group by,分組后對每一個組單獨排名
--------------------------------------------------------------------------
--統計各個學科的排名依次為:
SELECT RANK() OVER (PARTITION BY b.scorename ORDER BY B.SCORE DESC) AS ROWNUMBER,b.scorename,
b.score, A.NAME, a.Id FROM dbo.student AS a INNER JOIN dbo.ScoreTB AS b ON a.Id = b.stuid ORDER BY SCORENAME

2. TOP 新用法
復制代碼 代碼如下:

DECLARE @num INT = 101
SELECT TOP (@num) * FROM Student ORDER BY Id --必須用括號括起來
SELECT TOP (@num) percent * FROM Student ORDER BY Id --只接受float并且1-100之間的數,如果傳入其他則會報錯

3. group by all 字段 / group by 字段
前者有點像left join ,right join的感覺,兩者的主要區別體現在有where條件被過濾的聚合函數,會重新抓取出來放入查詢的數據表中,只是聚合函數會根據返回值的類型用默認值0或者NULL來代替聚合函數的返回值。
當然從效率上來說,后者優于前者,就像inner join 優于left join一樣
4. count(*)/count(0) 與 count(字段)
如果查詢出來的字段中沒有NULL值,那么倆種查詢條件無任何區別,如果有NULL,后者統計出來的記錄則是 總記錄數 - NULL記錄數
從性能上來說,前者高于后者,因為后者會逐行掃描字段中是否有NULL值,有NULL則不加以統計,減少了邏輯讀的開銷,從而性能達到提升
5. top n With ties 的用法
詳見 http://www.cnblogs.com/skynet/archive/2010/03/29/1700055.html
舉個例子
select top 1 with ties * from student order by score desc
等價于
select * from student where score=(select top 1 score from student order by score desc)
6. Apply運算符
復制代碼 代碼如下:

View Code
--準備數據
CREATE TABLE [dbo].[Student](
[Id] [int] NULL,
[Name] [varchar](50) NULL
)
go
INSERT INTO dbo.Student VALUES (1, '張三')
INSERT INTO dbo.Student VALUES (2, '李斯')
INSERT INTO dbo.Student VALUES (3, '王五')
INSERT INTO dbo.Student VALUES (4, '神人')
go
CREATE TABLE [dbo].[scoretb](
[stuId] [int] NULL,
[scorename] [varchar](50) NULL,
[score] INT NULL
)
go
INSERT INTO [scoretb] VALUES (1,'語文',22)
INSERT INTO [scoretb] VALUES (1,'數學',32)
INSERT INTO [scoretb] VALUES (1,'外語',42)
INSERT INTO [scoretb] VALUES (2,'語文',52)
INSERT INTO [scoretb] VALUES (2,'數學',62)
INSERT INTO [scoretb] VALUES (2,'外語',72)
INSERT INTO [scoretb] VALUES (3,'語文',82)
INSERT INTO [scoretb] VALUES (3,'數學',92)
INSERT INTO [scoretb] VALUES (3,'外語',72)
--創建表值函數
CREATE FUNCTION [dbo].[fGetScore](@stuid int)
RETURNS @score TABLE
(
[stuId] [int] NULL,
[scorename] [varchar](50) NULL,
[score] INT NULL
)
as
BEGIN
INSERT INTO @score
SELECT stuid,scorename,score FROM dbo.scoretb WHERE stuId = @stuid
RETURN;
END
GO
--開始使用
SELECT A.id,A.name,B.scorename,B.score FROM [Student] A
CROSS APPLY [dbo].[fGetScore](A.Id) B --相當于inner join效果
SELECT A.id,A.name,B.scorename,B.score FROM [Student] A
OUTER APPLY [dbo].[fGetScore](A.Id) B --相當于left join效果
--而不能這樣使用
--SELECT A.id,A.name,B.scorename,B.score FROM [Student] A
-- INNER JOIN [dbo].[fGetScore](A.Id) B ON A.Id = B.stuid
-- SELECT A.id,A.name,B.scorename,B.score FROM [Student] A
-- INNER JOIN (SELECT * FROM [dbo].[fGetScore](A.Id)) B ON A.Id = B.stuid

7. INTERSECT和EXCEPT運算符
EXCEPT 只包含excpet關鍵字左邊而且右邊的結果集中不存在的那些行 INTERSECT 只包含兩個結果集中都存在的那些行
往往EXISTS關鍵字可以代替上面的關鍵字,并且從性能中可以看到比他們更好,但EXCEPT/INTERSECT更便于閱讀和直觀。還是建議從性能更優入手。
8. 索引提高查詢效率的原理
索引與EXISTS運算符在處理方式上很像,它們都可以在找到匹配值后立即退出查詢運行,從而提高了查詢性能
9. 表變量與臨時表
主要區別: 1表變量不寫日志,沒有統計信息,頻繁更改不會造成存儲過程重新編譯,不能建索引和統計信息,但是可以建立主鍵,變通實現索引查找,表變量不只是在內存中操作,數據量大的情況也會寫tempdb,即物理磁盤的IO操作。 2.事務回滾對表變量無效(原因沒有統計信息)
一般來說,數據量大,臨時結果集需要和其他表二次關聯用臨時表 數據量小,單獨操作臨時結果集用表變量
10. 腳本和批處理
Go不是一條T-SQL命令,他只能被編譯工具Management Studio, SQLCMD識別,如果用第三方工具,不一定支持GO命令。例如ADO.NET,ADO。
11. SQLCMD的運用
SQLCMD -Usa -Psa -Q "SELECT * FROM TESTDB.dbo.mytable"
SQLCMD -Usa -Psa -i testsql.sql 運行文件里的SQL語句
12. EXEC 使用說明
在執行過EXEC之后,可以使用類似@@ROWCOUNT這樣的變量查看影響行數;不能在EXEC的參數中,針對EXEC字符串運行函數,例如cast(XX AS VARCHAR),對于EXEC的參數,只能用字符串相加,或者是整體的字符串。
13. WAITFOR 的含義
WAITFOR TIME 'TIME'> 定時執行; WAITFOR DELAY 'TIME'> 延遲執行
14. 存儲過程 總結
1)用TRY/CATCH 替代 @@ERROR這種更科學,其一@@ERROR沒有TRA/CATCH直觀,其二遇到錯誤級別在11-19的錯誤,錯誤會使運行直接中斷,導致@@ERROR判斷錯誤與否無效。
2)使用RAISERROR 拋錯
WITH LOG,當嚴重級別大于等于19時,需要使用這個選項
WITH SETERROR,使其重寫@@ERROR值,方便外部調用
WITH NOWAIT 立刻將錯誤通知給客戶端
15. 游標的復習
游標主要部分包括:1)聲明 2)打開 3)使用或導航 4)關閉 5)釋放
嵌套使用游標示例
復制代碼 代碼如下:

DECLARE BillMsgCursor CURSOR FOR
SELECT TypeNo,TabDetailName FROM dbo.BillType
OPEN BillMsgCursor
DECLARE @TypeNo CHAR(5)
DECLARE @DetailName VARCHAR(50)
FETCH NEXT FROM BillMsgCursor INTO @TypeNo,@DetailName
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @DataFieldName VARCHAR(50)
DECLARE ColumnName CURSOR FOR
SELECT name FROM syscolumns WHERE id = OBJECT_ID(@DetailName)
OPEN ColumnName
FETCH NEXT FROM ColumnName INTO @DataFieldName
PRINT '單據編號:' + @TypeNo
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'ListDetailDataFiled.Add('''+@DataFieldName+''');'
FETCH NEXT FROM ColumnName INTO @DataFieldName
END
CLOSE ColumnName
DEALLOCATE ColumnName
FETCH NEXT FROM BillMsgCursor INTO @TypeNo,@DetailName
END
CLOSE BillMsgCursor
DEALLOCATE BillMsgCursor

@@fetch_status值的意義:0 FETCH 語句成功;-1 FETCH 語句失敗或此行不在結果集中;-2 被提取的行不存在
FETCH [NEXT/PRIOR/FIRST/LAST] FROM ... INTO 針對游標為SCROLL類型的
16. 游標的分類
1)靜態游標(static):相當于臨時表,會保存在tempdb里的私有表中,猶如快照表復制一份
a.一旦創建了游標,它就與實際記錄相分離并不再維持任何鎖
b.游標就是獨立的,不再以任何方式與原始數據相關聯
2)鍵集驅動的游標(keyset):需要在一定程度上感知對數據的修改,但不必了解最新發生的所有插入
a.表必須具有唯一索引
b.只有鍵集在tempdb中,而非整個數據集,對整個服務器性能產生有利的影響
c.能感知到對己是鍵集一部分的行所做的修改(改刪),不能感知新增
3)動態游標(DYNAMIC)
a.完全動態,非常敏感,對底層數據做的所有事情都會影響,性能當然也是最差的
b.它們會帶來額外的并發性問題
c.每發出一次FETCH,都要重建游標
d.可允許運行沒有唯一索引的表中,但弊端會造成SQLSERVER無法追蹤它在游標的位置造成死循環,應避免這樣使用
4)快進游標(FAST_FORWARD)
在許多情況下,FAST_FORWARD游標會隱式轉換為其他游標類型

標簽:新余 中衛 濟寧 金昌 黃山 宜春 河源 貸款群呼

巨人網絡通訊聲明:本文標題《SQL Server 總結復習 (二)》,本文關鍵詞  SQL,Server,總結,復習,二,SQL,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL Server 總結復習 (二)》相關的同類信息!
  • 本頁收集關于SQL Server 總結復習 (二)的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲成人动漫av| 久久久久久久久久久久久女国产乱| 97久久精品人人爽人人爽蜜臀| 日韩一区二区三区高清免费看看| 亚洲精品日韩专区silk | 91精品国产福利| 自拍偷拍亚洲激情| 91蜜桃免费观看视频| 亚洲三级电影网站| 欧美美女直播网站| 日韩精品高清不卡| 精品第一国产综合精品aⅴ| 精品午夜久久福利影院| 中文字幕成人av| 91精彩视频在线| 亚洲丰满少妇videoshd| 精品久久久网站| 99视频一区二区| 免费在线看成人av| 国产精品成人网| 日韩一区二区三区观看| 91一区二区三区在线播放| 亚洲chinese男男1069| 久久久天堂av| 欧美日韩aaaaa| 国产综合久久久久久久久久久久| 国产精品第五页| 欧美一区二区三区视频| 国产美女在线精品| 亚洲激情校园春色| 久久久久久久精| 欧美乱妇一区二区三区不卡视频| 久久国产视频网| 亚洲欧洲99久久| 日韩欧美中文字幕公布| 91麻豆精东视频| 国产精品一区二区在线观看不卡| 亚洲精品精品亚洲| 国产色综合久久| 欧美亚洲综合久久| eeuss鲁片一区二区三区 | 精品亚洲国产成人av制服丝袜 | 欧美精品tushy高清| 国产成人午夜精品影院观看视频| 夜夜嗨av一区二区三区四季av| 久久久亚洲精华液精华液精华液 | 成人黄色软件下载| 麻豆精品久久久| 亚洲国产aⅴ成人精品无吗| 国产免费成人在线视频| 日韩免费看网站| 欧美日韩专区在线| 91麻豆视频网站| 豆国产96在线|亚洲| 激情综合色播五月| 免费亚洲电影在线| 天使萌一区二区三区免费观看| 亚洲视频网在线直播| 国产日产亚洲精品系列| 久久综合五月天婷婷伊人| 欧美精品亚洲一区二区在线播放| 欧美视频一区在线观看| 91亚洲精品久久久蜜桃网站| 成人免费毛片高清视频| 国产一区二区按摩在线观看| 日本特黄久久久高潮| 午夜影视日本亚洲欧洲精品| 亚洲国产精品久久不卡毛片| 一区二区三区日韩欧美| 一区二区三区在线免费播放| 亚洲综合另类小说| 午夜av一区二区三区| 日本特黄久久久高潮| 亚洲高清在线精品| 久久超碰97中文字幕| 毛片av一区二区| 狠狠色狠狠色综合| 成人国产精品免费观看视频| 成人午夜av电影| 色综合一区二区| 欧美情侣在线播放| 欧美tickle裸体挠脚心vk| 2021中文字幕一区亚洲| 国产精品理论片| av中文字幕亚洲| 久久久久久麻豆| 国产成人亚洲综合a∨婷婷图片| 麻豆精品久久久| 国产综合久久久久久鬼色| 国产成人免费视频精品含羞草妖精| 国精产品一区一区三区mba视频| 蜜臀av国产精品久久久久| 久久99热国产| 成人永久看片免费视频天堂| 91丨porny丨最新| 欧美日韩黄视频| 久久尤物电影视频在线观看| 国产精品色在线观看| 亚洲日本乱码在线观看| 亚洲一区二三区| 久久成人精品无人区| 成人激情免费电影网址| 欧美日韩中文字幕一区二区| 精品黑人一区二区三区久久| 国产精品久久久久一区| 丝袜国产日韩另类美女| 国产成人亚洲精品青草天美| 欧美日韩一级二级三级| 久久亚洲精华国产精华液| 亚洲欧美区自拍先锋| 久久精品免费看| 91福利视频久久久久| 精品久久国产字幕高潮| 亚洲精品免费视频| 国产精品一区二区久激情瑜伽| 欧美伊人久久久久久久久影院 | 26uuu成人网一区二区三区| 亚洲精品日日夜夜| 国产aⅴ综合色| 91精品蜜臀在线一区尤物| 国产精品乱码一区二三区小蝌蚪| 秋霞电影一区二区| 在线观看国产91| 国产精品私房写真福利视频| 另类小说综合欧美亚洲| 成人天堂资源www在线| 日韩一区二区三区四区五区六区 | 日本不卡一区二区三区高清视频| 成人av动漫网站| 欧美电影免费观看高清完整版在线| 久久综合久久久久88| 日韩高清一区二区| 欧美男女性生活在线直播观看| 国产精品久久久久久亚洲伦| 国产精品一区在线| 国产日本亚洲高清| 美腿丝袜亚洲三区| 成人97人人超碰人人99| 国产欧美在线观看一区| 蜜臀av性久久久久蜜臀av麻豆 | 在线国产亚洲欧美| 亚洲欧洲无码一区二区三区| 精品一区二区三区免费播放| 日韩欧美国产电影| 日本亚洲免费观看| 欧美精品丝袜久久久中文字幕| 亚洲国产wwwccc36天堂| 欧美日韩一区中文字幕| 一区二区三区高清| 欧美制服丝袜第一页| 亚洲免费观看高清完整版在线 | 日韩电影一二三区| 在线中文字幕一区二区| 在线亚洲免费视频| 亚洲国产你懂的| 日韩一区二区视频| 国产麻豆视频精品| 久久精品夜色噜噜亚洲a∨| 国产精品主播直播| 国产日韩欧美麻豆| 国产一区二区网址| 一区免费观看视频| 欧美日韩一区二区三区在线| 麻豆国产欧美一区二区三区| 久久综合九色综合欧美98 | 欧美精品三级日韩久久| 欧美一级片在线观看| 久久精品理论片| 亚洲欧洲无码一区二区三区| 免费一级片91| 国产精品福利影院| 91福利资源站| 精品一区二区三区欧美| 亚洲视频精选在线| 日韩三级在线免费观看| 亚洲色图欧洲色图婷婷| 不卡的av中国片| 日本视频中文字幕一区二区三区| 欧美国产综合一区二区| 欧洲国产伦久久久久久久| 视频一区二区三区入口| 中文字幕第一区二区| 制服视频三区第一页精品| 国产不卡视频在线观看| 亚洲国产精品一区二区www| 国产色综合久久| 欧美日韩免费高清一区色橹橹| 国产精品一区二区不卡| 亚洲国产日韩一区二区| 国产精品乱码人人做人人爱| 欧美一区二区三区思思人| 色激情天天射综合网| 成人午夜私人影院| 日本特黄久久久高潮| 亚洲精品视频免费看| 欧美激情一区二区三区四区| 欧美一级一区二区| 欧美老女人在线| 午夜精品一区在线观看| 国产精品国产三级国产普通话三级 |