我SQL常用腳本整理(下)

2021-12-29 數據管道

接上一章我們繼續分享一些簡單並且比較實用的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

執行結果:

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的幾種情況

--以下三種方法均可統計出表的記錄數
--第一種
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)


SQL的換行
制表符 CHAR(9)
換行符 CHAR(10)
回車 CHAR(13)

PRINT 'SQL'+CHAR(13)+'ROAD'
PRINT 'SQL'+CHAR(10)+'ROAD'
PRINT 'SQL'+CHAR(9)+'ROAD'

如果將查詢結果以文本格式顯示,而不是網格格式顯示,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 速度快,且使用的系統和事務日誌資源少。 
DELETE 語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日誌中記錄頁的釋放。 
TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置為該列的種子。

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

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

20、常用系統檢測腳本

--查看內存狀態
dbcc memorystatus

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

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

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

21、獲取腳本的執行時間

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

結果如下:

在狀態欄是不會精確到毫秒的,只能精確到秒

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

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

·················END·················

相關焦點

  • SQL 常用腳本整理
    常用功能腳本1mysqldump
  • SQL常用腳本整理(下)
    19、TRUNCATE 與 DELETETRUNCATE 是SQL中的一個刪除數據表內容的語句,用法是:TRUNCATE TABLE [Table Name] 速度快,而且效率高,因為: TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行
  • Linux常用Shell腳本,值得學習及收藏
    linux運維常用的腳本。如何學好腳本,最關鍵的是就是大量的練習 和實踐。根據以下腳本我們可以拓展,這樣我們提高的很快!舉一反三!小夥伴要是不熟悉linux的話可以在公眾號內回復 「linux」 獲取linux的教程 之後咱們在來回過頭來學一學腳本1.用Shell編程,判斷一文件是不是字符設備文件,如果是將其拷貝到 /dev 目錄下。
  • Linux常用Shell腳本知多少
    ,腳本會讓我們的 運維事半功倍,所以學會寫腳本是我們每個linux運維必須學會的一門功課,這裡收藏linux運維常用的腳本。如何學好腳本,最關鍵的是就是大量的練習 和實踐。根據以下腳本我們可以拓展,這樣我們提高的很快!舉一反三!小夥伴要是不熟悉linux的話可以在公眾號內回復 「linux」 獲取linux的教程 之後咱們再來回過頭來學一學腳本1.用Shell編程,判斷一文件是不是字符設備文件,如果是將其拷貝到 /dev 目錄下。
  • oracle常用SQL語句(匯總版)
    Oracle資料庫常用sql語句ORACLE 常用的SQL語法和數據對象一.數據控制語句 (DML) 部分1
  • windows下常用提高效率bat腳本分享
    windows下常用提高效率bat腳本分享
  • SQL常用語句總結
    Moratuwa大學生物信息學研究員Vijini Mallawaarachchi總結了常用的SQL語句用法,可供參考和溫習。本文總結了常用的SQL語句,尤其適合在面試前複習你的SQL知識。你可以嘗試文中的例子,溫習下你很久以前在資料庫系統課程上學到的知識。為了演示每個命令的用法,我們將使用一個樣例資料庫。
  • Mybatis 動態 SQL 處理
    下面我們通過具體的源碼來看下2者區分。靜態Sql和動態Sql靜態Sql說白了就沒有太任何判斷了解的Sql腳本。接下來我們看看Mybatis是如何遞歸解析動態sql腳本的。上面遞歸結果已經用不通顏色標記了,大家自己看下。特別需要看下IfSqlNode的屬性。關注頂級架構師動態Sql解析動態Sql解析主要是執行資料庫操作的時候把動態Sql轉換成JDBC能識別的Sql腳本。
  • Oracle常用經典SQL查詢(一)
    username format a12column opname format a16column progress format a8select username,sid,opname,      round(sofar*100 / totalwork,0) || '%' as progress,      time_remaining,sql_text
  • Python一鍵自動化整理文件,任意路徑下文件,都給你整理的明明白白!
    前言工作上的文檔和資料好幾個月沒整理了,因為平常太忙都是隨手往桌面丟。整個桌面雜亂無章全是文檔和資料。幾乎快佔滿整個屏幕了,所有我必須要整理一下了。但是手動整理太費時間了,於是我想到了python。2.
  • Mybatis動態Sql處理
    下面我們通過具體的源碼來看下2者區分。靜態Sql和動態Sql靜態Sql說白了就沒有太任何判斷了解的Sql腳本。接下來我們看看Mybatis是如何遞歸解析動態sql腳本的。上面遞歸結果已經用不通顏色標記了,大家自己看下。特別需要看下IfSqlNode的屬性。動態Sql解析動態Sql解析主要是執行資料庫操作的時候把動態Sql轉換成JDBC能識別的Sql腳本。
  • 資源下載丨Oracle優化工程師常用的34個腳本
    墨墨導讀:本文分享Oracle駐場工程師常用的腳本,基本上包含了日常監控、維護、故障定位及處理、SQL性能優化大部分場景
  • 資料庫SQL腳本優化
    join或者right join(外連接),結果集篩選率以及執行時間會有很大提升3、儘量用表連接代替子查詢,因為子查詢會在查詢前建立臨時表,查詢完又刪除臨時表,對於結果集大的查詢,性能影響更加明顯4、避免沒有where過濾條件的查詢 (前兩天就看到一個查詢bc_freight(400W+)表裡所有數據,沒有過濾條件,我看到的時候已經執行一萬多秒了
  • 分享我常用的5個免費的在線 SQL 資料庫環境,簡直太方便了!
    另外,複製網頁地址可以分享本次測試的數據和結果,以上截圖的地址為:http://sqlfiddle.com/#!9/a6c585/1。地址:http://sqlfiddle.com/DB Fiddle DB Fiddle 提供了 MySQL、PostgreSQL 以及 SQLite 資料庫的最新版本,使用時無需註冊,同時也提供了付費版本。
  • 最詳細的SQL注入相關的命令整理
    ,則表明WEB根目錄不在此目錄下,然後我們在用同樣的方法來獲得D盤第 2、3...個子目錄下的所有目錄列表,來判斷WEB根目錄是否在其下。現在假設,WEB根目錄在D盤的第一級子目錄下,該子目錄名稱為website,怎樣獲得這個目錄的名稱我想不用我說了吧。因為前面我們知道了WEB根目錄的深度為2,我們需要知道website下到底哪個才是真正的WEB根目錄。
  • Python自動化整理文件「大升級」,任意路徑下文件,都給你整理的明明白白!
    https://www.cnblogs.com/huny/p/14146719.html大家好,我是為大家分享「乾貨」和「黑科技」的黃同學!1. 前言工作上的文檔和資料好幾個月沒整理了,因為平常太忙都是隨手往桌面丟。整個桌面雜亂無章全是文檔和資料。幾乎快佔滿整個屏幕了,所有我必須要整理一下了。但是手動整理太費時間了,於是我想到了python。
  • 關於Oracle導出到csv文件的腳本-spool方法
    Oracle就是這麼牛,從外部文件導入到Oracle中有N種方法,想把Oracle的數據導出成通用文件的方法卻不多,梳理下來大致有三種辦法:1、spool方法2、DBMS_SQL和UTL_FILE方法3、python等程序方法本文主要是第一種方法,使用spool命令實行將sql
  • 如何使用 SQL Server FILESTREAM 存儲非結構化數據?
    作者 | ALEN BRI譯者 | 火火醬,責編 | Carol封圖 | CSDN 付費下載於視覺中國在本文中,我將解釋如何使用SQL Server FILESTREAM來存儲非結構化數據。同時,還會介紹FILESTREAM的優缺點。
  • Linux—shell腳本實例進階篇
    刪除用戶1.編寫腳本:[root@localhost mnt]#!實驗四利用case語句備份資料庫,要求1.執行db_dump.sh westos (資料庫密碼)2.腳本執行後會備份資料庫中的所有數據到/mnt/mysqldump目錄下
  • oracle基礎知識學習-相關命令及自帶腳本說明
    這些腳本若不會使用,不知道是否添加參數,就先打開腳本,查看頁頭的說明,就明白是否需要執行時寫入參數。1.  @?/rdbms/admin/catlog.sql         執行這個腳本後,創建資料庫的統計視圖,審計視圖。2. @?