一行SQL代碼能做什么?
SQL一行代碼其實(shí)有很多很多,一些常見(jiàn)的比如:
SELECT?*?FROM?TableName?
INSERT?INTO?TableName?VALUES(...)?
TRUNCATE?TABLE?TableName .....
這些就沒(méi)什么意思了,我們來(lái)給大家看一些比較“高級(jí)”的。
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 中沒(méi)有數(shù)據(jù)。
SELECT?TOP 1??1??FROM?Customers結(jié)果如下:

注:第一個(gè)1是查詢(xún)是否存在一條記錄,第二個(gè)1就是單純的數(shù)值1。
表Customers中數(shù)據(jù)如下:

現(xiàn)在隨機(jī)獲取一行數(shù)據(jù)
SELECT?TOP 1?* FROM?Customers ORDER?BY?NEWID();結(jié)果如下:


SELECT?TOP 5?* FROM?(SELECT?TOP 10?* FROM?Person ORDER?BY?ID?) a ORDER?BY?ID?DESC(提示:可以左右滑動(dòng)代碼)
結(jié)果如下:

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'
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、查詢(xún)當(dāng)前數(shù)據(jù)庫(kù)中的所有表名
SELECT???NAME?FROM?SYSOBJECTS WHERE?TYPE='U'
10、查詢(xún)某個(gè)表里的所有列名
SELECT?NAME?FROM?SYSCOLUMNS WHERE?ID=OBJECT_ID('Person')
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,B13、按姓氏筆畫(huà)多少排序
SELECT?Name?FROM?Person ORDER?BY?Name??Collate?Chinese_PRC_Stroke_CI_AS結(jié)果如下:

注:默認(rèn)是直接按姓氏拼音排序
14、延遲3秒執(zhí)行查詢(xún)語(yǔ)句
WAITFOR DELAY '0:0:3' SELECT?* FROM?Person
15、將查詢(xún)結(jié)果轉(zhuǎn)換為XML格式
SELECT?* FROM?Person WHERE?ID=1?FOR?XML?PATH
16、將小數(shù)轉(zhuǎn)換成百分?jǐn)?shù)
SELECT?CAST(CAST((0.8888*100) AS?NUMERIC(18,2)) as?VARCHAR(20)) + '%'
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代碼再分享給大家,如果你平常也有一些好用的SQL代碼,歡迎可以在留言區(qū)分享一下。





