<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SQL常用腳本整理(下)

          共 4130字,需瀏覽 9分鐘

           ·

          2021-10-21 06:15

          點擊關注上方“SQL數據庫開發(fā)”,

          設為“置頂或星標”,第一時間送達干貨
          SQL專欄

          SQL基礎知識第二版
          SQL高級知識第二版

          之前已經分享了一部分內容SQL常用腳本整理
          接上一章我們繼續(xù)分享一些簡單并且比較實用的SQL腳本


          11、SQL中的相除

          方法一

          --SQL中的相除
          SELECT
          CASE WHEN ISNULL(A-B,0)=0 THEN ''
          ELSE CAST(CONVERT(DECIMAL(18,2),A*100.0/(A-B)) AS VARCHAR(10))+'%' ?
          END AS '百分數'? --FROM 表

          這里我們先要判斷被除數是否為0,如果為0給出一個想輸出的結果,這里我們返回空白(是字符類型,不是NULL),在不為0的時候就給出具體的計算公式,然后轉換成字符類型再和“%”進行拼接。例如:

          SELECT 
          CASE WHEN ISNULL(5-2,0)=0 THEN ''
          ELSE CAST(CONVERT(DECIMAL(18,2),5*100.0/(5-2)) AS VARCHAR(10))+'%' ?
          END AS '百分數'? --FROM 表

          返回的結果:


          方法二

          SELECT 
          (CONVERT(VARCHAR(20),ROUND(41*100.0/88,3))+'%') AS '百分比'
          --FROM A

          執(zhí)行結果:



          12、四舍五入ROUND函數

          ROUND?(?numeric_expression?,?length?[?,function?]?)
          function 必須為 tinyint、smallint ?或 int。
          如果省略 function 或其值為?0(默認值),則將舍入 numeric_expression。
          如果指定了0以外的值,則將截斷 numeric_expression。

          SELECT ROUND(150.45648, 2);
          --保留小數點后兩位,需要四舍五入
          --結果:
          150.46000

          SELECT ROUND(150.45648, 2, 0);
          --保留小數點后兩位,0為默認值,表示進行四舍五入
          --結果:
          150.46000

          SELECT ROUND(150.45648, 2, 1);
          --保留小數點后兩位,不需要四舍五入,這里除0以外都是有同樣的效果,
          --與Oracle的TRUNC函數效果相同

          --結果:
          150.45000

          SELECT ROUND(150.45648, 2, 2);
          --保留小數點后兩位,不需要四舍五入,這里除0以外都是有同樣的效果,
          --與Oracle的TRUNC函數效果相同

          --結果:
          150.45000

          (提示:可以左右滑動代碼)



          13、對字段出現NULL值的處理

          方法一

          --CASE
          SELECT
          CASE WHEN ?'字段名' IS NULL THEN 'NULL'
          ELSE CONVERT(VARCHAR(20),'字段名1') END
          AS 'NewName'
          --結果:
          字段名1

          SELECT CASE WHEN NULL IS NULL THEN 'N'
          ELSE CONVERT(VARCHAR(20),NULL) END
          AS 'NewName'
          --結果:
          N


          方法二

          --SQL Server 2005:COALESCE
          SELECT COALESCE('字符串類型字段','N') AS 'NewName'
          --結果:
          字符串類型字段

          SELECT COALESCE(CONVERT(VARCHAR(20),'非字符串類型字段'),'N') AS 'NewName'
          --結果:
          非字符串類型字段

          SELECT COALESCE(CONVERT(VARCHAR(20),NULL),'N') AS 'NewName'
          --結果:
          N

          --COALESCE,返回其參數中的第一個非空表達式
          SELECT COALESCE(NULL,NULL,1,2,NULL)
          --結果:
          1

          SELECT COALESCE(NULL,11,12,13,NULL)
          --結果:
          11

          SELECT COALESCE(111,112,113,114,NULL)
          --結果:
          111



          14、COUNT的幾種情況

          --以下三種方法均可統(tǒng)計出表的記錄數
          --第一種
          select count(*) from tablename

          --第二種
          select count(ID) from tablename

          --第三種,1換成其它值也是可以的
          select count(1) from tablename



          15、UNION ALL多表插入

          把兩個相同結構的表union后插入到一個新表中,
          當然兩個以上的相同結構的表也是可以的,
          這里的相同是指兩個或多個表的列數和每個對應列的類型相同,
          列名稱可以不同

          select *
          into table_new
          from table_1
          union all
          select * from table_2



          16、查看數據庫緩存的SQL

          use master
          declare @dbid int
          Select @dbid = dbid from sysdatabases
          where name = 'SQL_ROAD'--修改成數據庫的名稱

          select
          dbid,UseCounts ,RefCounts,CacheObjtype,ObjType,
          DB_Name(dbid) as DatabaseName,SQL
          from syscacheobjects
          where dbid=@dbid
          order by dbid,useCounts desc,objtype

          我們可以看到數據庫中當前正在運行的SQL有哪些



          17、刪除計劃緩存

          --刪除整個數據庫的計劃緩存
          DBCC FREEPROCCACHE

          --刪除某個數據庫的計劃緩存
          USE master
          DECLARE @dbid INT
          SELECT @dbid=dbid FROM sysdatabases WHERE NAME = 'SQL_ROAD'
          DBCC FLUSHPROCINDB (@dbid)


          18、SQL換行
          SQL的換行
          制表符 CHAR(9)
          換行符 CHAR(10)
          回車 CHAR(13)
          PRINT 'SQL'+CHAR(13)+'ROAD'
          PRINT 'SQL'+CHAR(10)+'ROAD'
          PRINT 'SQL'+CHAR(9)+'ROAD'
          執(zhí)行結果:


          如果將查詢結果以文本格式顯示,而不是網格格式顯示,SELECT語句也適用,我們先將查詢結果改成以文本格式顯示


          --以文本格式顯示結果
          SELECT 'SQL'+ CHAR(10)+'ROAD'
          SELECT 'SQL'+ CHAR(13)+'ROAD'
          SELECT 'SQL' + CHAR(10) + CHAR(13) + 'ROAD'

          結果如下:



          19、TRUNCATE 與 DELETE

          TRUNCATE 是SQL中的一個刪除數據表內容的語句,用法是:

          TRUNCATE TABLE [Table Name] 速度快,而且效率高,因為:?
          TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統(tǒng)和事務日志資源少。?
          DELETE 語句每次刪除一行,并在事務日志中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,并且只在事務日志中記錄頁的釋放。?
          TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置為該列的種子。

          如果想保留標識計數值,請改用 DELETE。

          如果要刪除表定義及其數據,請使用 DROP TABLE 語句。?
          對于由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。由于 TRUNCATE TABLE 不記錄在日志中,所以它不能激活觸發(fā)器。TRUNCATE TABLE 不能用于參與了索引視圖的表。?



          20、常用系統(tǒng)檢測腳本

          --查看內存狀態(tài)
          dbcc memorystatus

          --查看哪個引起的阻塞,blk
          EXEC sp_who active

          --查看鎖住了那個資源id,objid
          EXEC sp_lock

          還有如何查看查詢分析器的SPID,可以在查詢分析器的狀態(tài)欄看到,比如sa(57),這就表示當前查詢分析器SPID為57,這樣在使用profile的時候就可以指定當前窗體進行監(jiān)控。狀態(tài)欄在查詢窗口的右下角。



          21、獲取腳本的執(zhí)行時間

          declare @timediff datetime
          select @timediff=getdate()
          select * from Suppliers
          print '耗時:'+ convert(varchar(10),datediff(ms,@timediff,getdate()))

          結果如下:

          在狀態(tài)欄是不會精確到毫秒的,只能精確到秒

          這個腳本可以更加有效的查看SQL代碼的執(zhí)行效率。


          以上就是今天分享給大家一些比較實用的SQL腳本,以后想到了其他內容再分享給大家,好東西記得分享轉發(fā)呀~


          最后給大家分享我寫的SQL兩件套:《SQL基礎知識第二版》《SQL高級知識第二版》的PDF電子版。里面有各個語法的解釋、大量的實例講解和批注等等,非常通俗易懂,方便大家跟著一起來實操。

          有需要的讀者可以下載學習,在下面的公眾號「數據前線」(非本號)后臺回復關鍵字:SQL,就行
          數據前線

          后臺回復關鍵字:1024,獲取一份精心整理的技術干貨
          后臺回復關鍵字:進群,帶你進入高手如云的交流群。

          推薦閱讀
          瀏覽 98
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品色情A级毛片 | 骚逼女| 天堂网一区二区 | 乱伦月 大像传媒 | AA级黄色一级黄色 |