博客 > SQL知識:17條好用且代碼少的SQL
瀏覽量:3045次評論:0次
作者:銳成網(wǎng)絡(luò)整理時(shí)間:2024-08-09 17:55:41
SQL少則幾行,多則上百行,哪些功能一行SQL就能搞定?以下是一些好用且代碼少的SQL,幫助您一行SQL代碼就可實(shí)現(xiàn)復(fù)制表結(jié)構(gòu)、刪除重復(fù)記錄、獲取笛卡爾積等功能。
1、復(fù)制表結(jié)構(gòu)
SELECT * INTO Customers_bak FROM Customers WHERE 1=2;
或者
SELECT TOP 0 * INTO Customers_bak FROM Customers;
可以得到與Customers 表結(jié)構(gòu)一樣的Customers_bak ,而且Customers_bak 中沒有數(shù)據(jù)。
2、查詢表里是否存在數(shù)據(jù)
SELECT TOP 1 1 FROM Customers
結(jié)果如下:
注:第一個(gè)1是查詢是否存在一條記錄,第二個(gè)1就是單純的數(shù)值1。
3、隨機(jī)獲取一行數(shù)據(jù)
表Customers中數(shù)據(jù)如下:
現(xiàn)在隨機(jī)獲取一行數(shù)據(jù)
SELECT TOP 1 * FROM Customers ORDER BY NEWID();
結(jié)果如下:
注:多次執(zhí)行,結(jié)果會(huì)不一樣
4、獲取第6到10行的記錄表Person數(shù)據(jù)如下:
獲取第6到10行數(shù)據(jù)
SELECT TOP 5 * FROM (SELECT TOP 10 * FROM Person ORDER BY ID ) a ORDER BY ID DESC
(提示:可以左右滑動(dòng)代碼)
結(jié)果如下:
注:如果希望是升序,可以在外面在加一層SELECT子查詢對ID進(jìn)行升序排序。
5、對空值賦默認(rèn)值
SELECT ISNULL(Price,0) FROM Orders
注:Price為空值時(shí)會(huì)默認(rèn)賦0
6、將日期轉(zhuǎn)換成文本格式
SELECT CONVERT(VARCHAR(10),CreateDate,120) FROM Students
注:CreateDate為帶時(shí)間的完整日期格式,執(zhí)行后會(huì)得到不帶時(shí)間的字符串,如'2020-05-31'
7、保留2位小數(shù)
SELECT CAST(Amount as NUMERIC(18,2)) FROM Orders
注:Amount是帶2位以上的小數(shù)格式,轉(zhuǎn)換后的小數(shù)會(huì)四舍五入。
8、刪除重復(fù)記錄(除了主鍵不同,其他字段均相同)
表Person數(shù)據(jù)如下:
刪除其中除ID以為其他都重復(fù)的記錄
DELETE FROM Person WHERE ID NOT IN (SELECT MAX(ID) FROM Person GROUP BY Name,Age,Sex,Phone)
刪除后結(jié)果如下:
9、查詢當(dāng)前數(shù)據(jù)庫中的所有表名
SELECT NAME FROM SYSOBJECTS WHERE TYPE='U'
結(jié)果如下:
10、查詢某個(gè)表里的所有列名
SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('Person')
結(jié)果如下:
11、將B表中的字段內(nèi)容更新到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
結(jié)果如下:
注:默認(rèn)是直接按姓氏拼音排序
14、延遲3秒執(zhí)行查詢語句
WAITFOR DELAY '0:0:3' SELECT * FROM Person
結(jié)果如下:
15、將查詢結(jié)果轉(zhuǎn)換為XML格式
SELECT * FROM Person WHERE ID=1 FOR XML PATH
結(jié)果如下:
16、將小數(shù)轉(zhuǎn)換成百分?jǐn)?shù)
SELECT CAST(CAST((0.8888*100) AS NUMERIC(18,2)) as VARCHAR(20)) + '%'
結(jié)果如下:
17、處理除數(shù)為0
SELECT ISNULL(A/NULLIF(B,0),1) FROM TABLEA
或
SELECT CASE WHEN B=0 THEN 1 ELSE A/B END FROM TABLEA
注:A為任意數(shù)值,B為0
重要聲明:本文來自SQL數(shù)據(jù)庫開發(fā),經(jīng)授權(quán)轉(zhuǎn)載,有部分增減,版權(quán)歸原作者所有,不代表銳成觀點(diǎn),轉(zhuǎn)載的目的在于傳遞更多知識和信息。
相關(guān)文章推薦
2025-05-27 11:53:22
2024-08-20 17:58:16
2024-08-19 17:49:29
2024-08-19 10:23:28
2024-08-16 17:06:33
熱門工具
標(biāo)簽選擇
閱讀排行
我的評論
還未登錄?點(diǎn)擊登錄