一套簡(jiǎn)單實(shí)用的SQL腳本闽寡,總有你需要的

工作中有許多比較常用的SQL腳本,今天開(kāi)始分幾章分享給大家相味。

image

1如迟、行轉(zhuǎn)列的用法PIVOT

CREATE table test 
(id int,name nvarchar(20),quarter int,number int) 
insert into test values(1,N'蘋(píng)果',1,1000) 
insert into test values(1,N'蘋(píng)果',2,2000) 
insert into test values(1,N'蘋(píng)果',3,4000) 
insert into test values(1,N'蘋(píng)果',4,5000) 
insert into test values(2,N'梨子',1,3000) 
insert into test values(2,N'梨子',2,3500) 
insert into test values(2,N'梨子',3,4200) 
insert into test values(2,N'梨子',4,5500) 
select * from test 

結(jié)果:

image.png
select ID,NAME, 
[1] as '一季度', 
[2] as '二季度', 
[3] as '三季度', 
[4] as '四季度' 
from 
test 
pivot 
( 
sum(number) 
for quarter in 
([1],[2],[3],[4]) 
) 
as pvt 

結(jié)果:

image.png

2、列轉(zhuǎn)行的用法UNPIOVT

create table test2 
(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int) 
insert into test2 values(1,'蘋(píng)果',1000,2000,4000,5000) 
insert into test2 values(2,'梨子',3000,3500,4200,5500) 
select * from test2 

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

結(jié)果:

image
--列轉(zhuǎn)行 
select id,name,quarter,number 
from 
test2 
unpivot 
( 
number 
for quarter in 
([Q1],[Q2],[Q3],[Q4]) 
) 
as unpvt 

結(jié)果:

image

3攻走、字符串替換SUBSTRING/REPLACE

SELECT REPLACE('abcdefg',SUBSTRING('abcdefg',2,4),'**') 

結(jié)果:

image
SELECT REPLACE('13512345678',SUBSTRING('13512345678',4,11),'********') 

結(jié)果:

image
SELECT REPLACE('12345678@qq.com','1234567','******') 

結(jié)果:

image

4殷勘、查詢一個(gè)表內(nèi)相同紀(jì)錄 HAVING

如果一個(gè)ID可以區(qū)分的話,可以這么寫(xiě)

SELECT * FROM HR.Employees

結(jié)果:

image
select * from HR.Employees 
where title in ( 
select title from HR.Employees 
group by title 
having count(1)>1) 

結(jié)果:

image

對(duì)比一下發(fā)現(xiàn)昔搂,ID為1,2的被過(guò)濾掉了玲销,因?yàn)樗麄冎挥幸粭l記錄

如果幾個(gè)ID才能區(qū)分的話,可以這么寫(xiě)

select * from HR.Employees 
where title+titleofcourtesy in 
(select title+titleofcourtesy 
from HR.Employees 
group by title,titleofcourtesy 
having count(1)>1) 

結(jié)果:

image.png

title在和titleofcourtesy進(jìn)行拼接后符合條件的就只有ID為6,7,8,9的了

5摘符、把多行SQL數(shù)據(jù)變成一條多列數(shù)據(jù)贤斜,即新增列

SELECT 
 id, 
 name, 
 SUM(CASE WHEN quarter=1 THEN number ELSE 0 END) '一季度', 
 SUM(CASE WHEN quarter=2 THEN number ELSE 0 END) '二季度', 
 SUM(CASE WHEN quarter=3 THEN number ELSE 0 END) '三季度', 
 SUM(CASE WHEN quarter=4 THEN number ELSE 0 END) '四季度' 
FROM test 
GROUP BY id,name 

結(jié)果:

image.png

我們將原來(lái)的4列增加到了6列策吠。細(xì)心的朋友可能發(fā)現(xiàn)了這個(gè)結(jié)果和上面的行轉(zhuǎn)列怎么一模一樣?其實(shí)上面的行轉(zhuǎn)列是省略寫(xiě)法,這種是比較通用的寫(xiě)法瘩绒。

6猴抹、表復(fù)制

語(yǔ)法1:Insert INTO table(field1,field2,...) values(value1,value2,...)

語(yǔ)法2:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

(要求目標(biāo)表Table2必須存在,由于目標(biāo)表Table2已經(jīng)存在锁荔,所以我們除了插入源表Table1的字段外蟀给,還可以插入常量。)

語(yǔ)法3:SELECT vale1, value2 into Table2 from Table1

(要求目標(biāo)表Table2不存在阳堕,因?yàn)樵诓迦霑r(shí)會(huì)自動(dòng)創(chuàng)建表Table2跋理,并將Table1中指定字段數(shù)據(jù)復(fù)制到Table2中。)

語(yǔ)法4:使用導(dǎo)入導(dǎo)出功能進(jìn)行全表復(fù)制恬总。如果是使用【編寫(xiě)查詢以指定要傳輸?shù)臄?shù)據(jù)】前普,那么在大數(shù)據(jù)表的復(fù)制就會(huì)有問(wèn)題?因?yàn)閺?fù)制到一定程度就不再動(dòng)了,內(nèi)存爆了?它也沒(méi)有寫(xiě)入到表中壹堰。而使用上面3種語(yǔ)法直接執(zhí)行是會(huì)馬上刷新到數(shù)據(jù)庫(kù)表中的拭卿,你刷新一下mdf文件就知道了。

7贱纠、利用帶關(guān)聯(lián)子查詢Update語(yǔ)句更新數(shù)據(jù)

--方法1: 
Update Table1 
set c = (select c from Table2 where a = Table1.a) 
where c is null 
 
--方法2: 
update  A 
set  newqiantity=B.qiantity 
from  A,B 
where  A.bnum=B.bnum 
 
--方法3: 
update 
(select A.bnum ,A.newqiantity,B.qiantity from A 
left join B on A.bnum=B.bnum) AS C 
set C.newqiantity = C.qiantity 
where C.bnum ='001' 

8峻厚、連接遠(yuǎn)程服務(wù)器

--方法1: 
select *  from openrowset( 
'SQLOLEDB', 
'server=192.168.0.1;uid=sa;pwd=password', 
'SELECT * FROM dbo.test') 
 
--方法2: 
select *  from openrowset( 
'SQLOLEDB', 
'192.168.0.1'; 
'sa'; 
'password', 
'SELECT * FROM dbo.test') 

當(dāng)然也可以參考以前的示例,建立DBLINK進(jìn)行遠(yuǎn)程連接

9并巍、Date 和 Time 樣式 CONVERT

CONVERT() 函數(shù)是把日期轉(zhuǎn)換為新數(shù)據(jù)類型的通用函數(shù)。

CONVERT() 函數(shù)可以用不同的格式顯示日期/時(shí)間數(shù)據(jù)换途。

語(yǔ)法

CONVERT(data_type(length),data_to_be_converted,style) 

data_type(length) 規(guī)定目標(biāo)數(shù)據(jù)類型(帶有可選的長(zhǎng)度)懊渡。data_to_be_converted 含有需要轉(zhuǎn)換的值。style 規(guī)定日期/時(shí)間的輸出格式军拟。

可以使用的 style 值:

image.png
SELECT CONVERT(varchar(100), GETDATE(), 0) 
--結(jié)果: 
12  7 2020  9:33PM 
SELECT CONVERT(varchar(100), GETDATE(), 1) 
--結(jié)果: 
12/07/20 
SELECT CONVERT(varchar(100), GETDATE(), 2) 
--結(jié)果: 
20.12.07 
SELECT CONVERT(varchar(100), GETDATE(), 3) 
--結(jié)果: 
07/12/20 
SELECT CONVERT(varchar(100), GETDATE(), 4) 
--結(jié)果: 
07.12.20 
SELECT CONVERT(varchar(100), GETDATE(), 5) 
--結(jié)果: 
07-12-20 
SELECT CONVERT(varchar(100), GETDATE(), 6) 
--結(jié)果: 
07 12 20 
SELECT CONVERT(varchar(100), GETDATE(), 7) 
--結(jié)果: 
12 07, 20 
SELECT CONVERT(varchar(100), GETDATE(), 8) 
--結(jié)果: 
21:33:18 
SELECT CONVERT(varchar(100), GETDATE(), 9) 
--結(jié)果: 
12  7 2020  9:33:18:780PM 
SELECT CONVERT(varchar(100), GETDATE(), 10) 
--結(jié)果: 
12-07-20 
SELECT CONVERT(varchar(100), GETDATE(), 11) 
--結(jié)果: 
20/12/07 
SELECT CONVERT(varchar(100), GETDATE(), 12) 
--結(jié)果: 
201207 
SELECT CONVERT(varchar(100), GETDATE(), 13) 
--結(jié)果: 
07 12 2020 21:33:18:780 
SELECT CONVERT(varchar(100), GETDATE(), 14) 
--結(jié)果: 
21:33:18:780 
SELECT CONVERT(varchar(100), GETDATE(), 20) 
--結(jié)果: 
2020-12-07 21:33:18 
SELECT CONVERT(varchar(100), GETDATE(), 21) 
--結(jié)果: 
2020-12-07 21:33:18.780 
SELECT CONVERT(varchar(100), GETDATE(), 22) 
--結(jié)果: 
12/07/20  9:33:18 PM 
SELECT CONVERT(varchar(100), GETDATE(), 23) 
--結(jié)果: 
2020-12-07 
SELECT CONVERT(varchar(100), GETDATE(), 24) 
--結(jié)果: 
21:33:18 
SELECT CONVERT(varchar(100), GETDATE(), 25) 
--結(jié)果: 
2020-12-07 21:33:18.780 
SELECT CONVERT(varchar(100), GETDATE(), 100) 
--結(jié)果: 
12  7 2020  9:33PM 
SELECT CONVERT(varchar(100), GETDATE(), 101) 
--結(jié)果: 
12/07/2020 
SELECT CONVERT(varchar(100), GETDATE(), 102) 
--結(jié)果: 
2020.12.07 
SELECT CONVERT(varchar(100), GETDATE(), 103) 
--結(jié)果: 
07/12/2020 
SELECT CONVERT(varchar(100), GETDATE(), 104) 
--結(jié)果: 
07.12.2020 
SELECT CONVERT(varchar(100), GETDATE(), 105) 
--結(jié)果: 
07-12-2020 
SELECT CONVERT(varchar(100), GETDATE(), 106) 
--結(jié)果: 
07 12 2020 
SELECT CONVERT(varchar(100), GETDATE(), 107) 
--結(jié)果: 
12 07, 2020 
SELECT CONVERT(varchar(100), GETDATE(), 108) 
--結(jié)果: 
21:33:18 
SELECT CONVERT(varchar(100), GETDATE(), 109) 
--結(jié)果: 
12  7 2020  9:33:18:780PM 
SELECT CONVERT(varchar(100), GETDATE(), 110) 
--結(jié)果: 
12-07-2020 
SELECT CONVERT(varchar(100), GETDATE(), 111) 
--結(jié)果: 
2020/12/07 
SELECT CONVERT(varchar(100), GETDATE(), 112) 
--結(jié)果: 
20201207 
SELECT CONVERT(varchar(100), GETDATE(), 113) 
--結(jié)果: 
07 12 2020 21:33:18:780 
SELECT CONVERT(varchar(100), GETDATE(), 114) 
--結(jié)果: 
21:33:18:780 
SELECT CONVERT(varchar(100), GETDATE(), 120) 
--結(jié)果: 
2020-12-07 21:33:18 
SELECT CONVERT(varchar(100), GETDATE(), 121) 
--結(jié)果: 
2020-12-07 21:33:18.780 

以上內(nèi)容剃执,在工作中比較常用,能記住最好懈息。不能記住就收藏起來(lái)肾档,在需要的時(shí)候查詢即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辫继,一起剝皮案震驚了整個(gè)濱河市怒见,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姑宽,老刑警劉巖遣耍,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異炮车,居然都是意外死亡舵变,警方通過(guò)查閱死者的電腦和手機(jī)酣溃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)纪隙,“玉大人赊豌,你說(shuō)我怎么就攤上這事∶嘣郏” “怎么了碘饼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)麸拄。 經(jīng)常有香客問(wèn)我派昧,道長(zhǎng),這世上最難降的妖魔是什么拢切? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任蒂萎,我火速辦了婚禮,結(jié)果婚禮上淮椰,老公的妹妹穿的比我還像新娘五慈。我一直安慰自己,他們只是感情好主穗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布泻拦。 她就那樣靜靜地躺著,像睡著了一般忽媒。 火紅的嫁衣襯著肌膚如雪争拐。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天晦雨,我揣著相機(jī)與錄音架曹,去河邊找鬼。 笑死闹瞧,一個(gè)胖子當(dāng)著我的面吹牛绑雄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奥邮,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼万牺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了洽腺?” 一聲冷哼從身側(cè)響起脚粟,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蘸朋,沒(méi)想到半個(gè)月后珊楼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡度液,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年厕宗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了画舌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡已慢,死狀恐怖曲聂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情佑惠,我是刑警寧澤朋腋,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站膜楷,受9級(jí)特大地震影響旭咽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赌厅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一穷绵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧特愿,春花似錦仲墨、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至毒嫡,卻和暖如春癌蚁,著一層夾襖步出監(jiān)牢的瞬間兜畸,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工膳叨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洽洁,地道東北人菲嘴。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像龄坪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子复唤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容