你知道一行SQL代碼能做什么?
本文轉載自微信公眾號「SQL數據庫開發」,作者丶平凡世界。轉載本文請聯系SQL數據庫開發公眾號。
最近在知乎上看到一個問題:一行代碼可以做什么?答題者數萬計,都是一些非常“高端”的操作,就在想一行SQL代碼能做什么呢?
SQL一行代碼其實有很多很多,一些常見的比如:
- SELECT * FROM TableName
- INSERT INTO TableName VALUES(...)
- TRUNCATE TABLE TableName .....
這些就沒什么意思了,我們來給大家看一些比較“高級”的。
1、復制表結構
- SELECT * INTO Customers_bak FROM Customers WHERE 1=2;
- 或者
- SELECT TOP 0 * INTO Customers_bak FROM Customers;
可以得到與Customers 表結構一樣的Customers_bak ,而且Customers_bak 中沒有數據。
2、查詢表里是否存在數據
- SELECT TOP 1 1 FROM Customers
結果如下:
注:第一個1是查詢是否存在一條記錄,第二個1就是單純的數值1。
3、隨機獲取一行數據
表Customers中數據如下:
現在隨機獲取一行數據
- SELECT TOP 1 * FROM Customers ORDER BY NEWID();
結果如下:
注:多次執行,結果會不一樣
4、獲取第6到10行的記錄
表Person數據如下:
獲取第6到10行數據
- SELECT TOP 5 * FROM (SELECT TOP 10 * FROM Person ORDER BY ID ) a ORDER BY ID DESC
(提示:可以左右滑動代碼)
結果如下:
注:如果希望是升序,可以在外面在加一層SELECT子查詢對ID進行升序排序。
5、對空值賦默認值
- SELECT ISNULL(Price,0) FROM Orders
注:Price為空值時會默認賦0
6、將日期轉換成文本格式
- SELECT CONVERT(VARCHAR(10),CreateDate,120) FROM Students
注:CreateDate為帶時間的完整日期格式,執行后會得到不帶時間的字符串,如'2020-05-31'
7、保留2位小數
- SELECT CAST(Amount as NUMERIC(18,2)) FROM Orders
注:Amount是帶2位以上的小數格式,轉換后的小數會四舍五入。
8、刪除重復記錄(除了主鍵不同,其他字段均相同)
表Person數據如下:
刪除其中除ID以為其他都重復的記錄
- DELETE FROM Person WHERE ID NOT IN (SELECT MAX(ID) FROM Person GROUP BY Name,Age,Sex,Phone)
刪除后結果如下:
9、查詢當前數據庫中的所有表名
- SELECT NAME FROM SYSOBJECTS WHERE TYPE='U'
結果如下:
10、查詢某個表里的所有列名
- SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('Person')
結果如下:
11、將B表中的字段內容更新到A表
- UPDATE A SET A.Name=(SELECT B.Name FROM B WHERE A.ID=B.ID)
12、獲取笛卡爾積
- SELECT A.*,B.* FROM A,B
13、按姓氏筆畫多少排序
- SELECT Name FROM Person ORDER BY Name Collate Chinese_PRC_Stroke_CI_AS
結果如下:
注:默認是直接按姓氏拼音排序
14、延遲3秒執行查詢語句
- WAITFOR DELAY '0:0:3' SELECT * FROM Person
結果如下:
15、將查詢結果轉換為XML格式
- SELECT * FROM Person WHERE ID=1 FOR XML PATH
結果如下:
16、將小數轉換成百分數
- SELECT CAST(CAST((0.8888*100) AS NUMERIC(18,2)) as VARCHAR(20)) + '%'
結果如下:
17、處理除數為0
- SELECT ISNULL(A/NULLIF(B,0),1) FROM TABLEA
- 或
- SELECT CASE WHEN B=0 THEN 1 ELSE A/B END FROM TABLEA
注:A為任意數值,B為0
下次想到一些好用的SQL代碼再分享給大家,如果你平常也有一些好用的SQL代碼,歡迎可以在留言區分享一下。