<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    SQL常用腳本整理(下)

    共 4130字,需瀏覽 9分鐘

     ·

    2021-10-21 06:15

    點(diǎn)擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,

    設(shè)為“置頂或星標(biāo)”,第一時(shí)間送達(dá)干貨
    SQL專欄

    SQL基礎(chǔ)知識第二版
    SQL高級知識第二版

    之前已經(jīng)分享了一部分內(nèi)容SQL常用腳本整理
    接上一章我們繼續(xù)分享一些簡單并且比較實(shí)用的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 '百分?jǐn)?shù)'? --FROM 表

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

    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 '百分?jǐn)?shù)'? --FROM 表

    返回的結(jié)果:


    方法二

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

    執(zhí)行結(jié)果:



    12、四舍五入ROUND函數(shù)

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

    SELECT ROUND(150.45648, 2);
    --保留小數(shù)點(diǎn)后兩位,需要四舍五入
    --結(jié)果:
    150.46000

    SELECT ROUND(150.45648, 2, 0);
    --保留小數(shù)點(diǎn)后兩位,0為默認(rèn)值,表示進(jìn)行四舍五入
    --結(jié)果:
    150.46000

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

    --結(jié)果:
    150.45000

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

    --結(jié)果:
    150.45000

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



    13、對字段出現(xiàn)NULL值的處理

    方法一

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

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


    方法二

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

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

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

    --COALESCE,返回其參數(shù)中的第一個(gè)非空表達(dá)式
    SELECT COALESCE(NULL,NULL,1,2,NULL)
    --結(jié)果:
    1

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

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



    14、COUNT的幾種情況

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

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

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



    15、UNION ALL多表插入

    把兩個(gè)相同結(jié)構(gòu)的表union后插入到一個(gè)新表中,
    當(dāng)然兩個(gè)以上的相同結(jié)構(gòu)的表也是可以的,
    這里的相同是指兩個(gè)或多個(gè)表的列數(shù)和每個(gè)對應(yīng)列的類型相同,
    列名稱可以不同

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



    16、查看數(shù)據(jù)庫緩存的SQL

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

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

    我們可以看到數(shù)據(jù)庫中當(dāng)前正在運(yùn)行的SQL有哪些



    17、刪除計(jì)劃緩存

    --刪除整個(gè)數(shù)據(jù)庫的計(jì)劃緩存
    DBCC FREEPROCCACHE

    --刪除某個(gè)數(shù)據(jù)庫的計(jì)劃緩存
    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í)行結(jié)果:


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


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

    結(jié)果如下:



    19、TRUNCATE 與 DELETE

    TRUNCATE 是SQL中的一個(gè)刪除數(shù)據(jù)表內(nèi)容的語句,用法是:

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

    如果想保留標(biāo)識計(jì)數(shù)值,請改用 DELETE。

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



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

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

    --查看哪個(gè)引起的阻塞,blk
    EXEC sp_who active

    --查看鎖住了那個(gè)資源id,objid
    EXEC sp_lock

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



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

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

    結(jié)果如下:

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

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


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


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

    有需要的讀者可以下載學(xué)習(xí),在下面的公眾號「數(shù)據(jù)前線」(非本號)后臺回復(fù)關(guān)鍵字:SQL,就行
    數(shù)據(jù)前線

    后臺回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨
    后臺回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。

    推薦閱讀
    瀏覽 98
    點(diǎn)贊
    評論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評論
    圖片
    表情
    推薦
    點(diǎn)贊
    評論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    不卡视频免费在线播放 | 三及日逼| 麻豆成人免费视频在线观看 | 婷婷丁香激情综合 | 性爱在线网站 |