《SQL常用脚本大全.docx》由会员分享,可在线阅读,更多相关《SQL常用脚本大全.docx(33页珍藏版)》请在第一文库网上搜索。
1、SQL常用脚本大全(白金版)导读:作为一名数据人,在工作中有许多比较常用的SQL脚本,今天也整理总结出来分享给大家,希望能有所帮助。1、行转列的用法PIVOT|(id int, name nvarchar(20), quarter int, number intlnseintesvalue2F2500)Binsert into test values (2, N梨子,3, 4200)insert into test values N梨子,4, 5500)select * from test结果:idnamequarter number1| 苹果110001苹果220001苹果340001苹果4
2、50002梨子130002梨子235002梨子342002梨子45500select ID, NAME,4 as 四季度i 1for quarter iis pvt结果:ID NAME 一季度二季度三季度四季度21 梨子3000350042005500z1苹果10002000400050002、列转行的用法UNPIOVTroate table test2(id int, name varchar (20), QI int, Q2 int, Q3 int, Q4 int)select * from test2(提示:可以左右滑动代码)结果:id nameQIQ2Q3Q41 I 苹果1000200
3、0400050002 梨子3000350042005500select id, name, quarter, numbeiI结果:id name quarter number| 1 j 苹果QI1000:;1苹果Q220001苹果Q340001苹果Q450002梨子QI30002梨子Q235002梨子Q342002梨子Q455003、字符串替换 SUBSTRING/REPLACESELECT REPLACE( abcdefg, SUBSTRING ( abcdefg, 2, 4), *)结果:(无列名)SELECT REPLACEC 13512345678, SUBSTRING(? 13512
4、345678, ,4,11)/*)结果:(无列名)135*SELECT REPLACE (,12345678qq. com / 1234567, / *)结果:(无列名)*8qq. com4、查询一个表内相同纪录HAVING如果一个ID可以区分的话,可以这么写SELECT * FROM HR. Employees结果:empid lastname1123456789DavisFunkLewPeledBuckSuursKingCameronDolgopyatovafirstnameSaraDonJudyYaelSvenPaulRussellMariaZoyatitleCEOVice Presid
5、ent, SalesSales ManagerSales RepresentativeSales ManagerSales RepresentativeSales RepresentativeSales RepresentativeSales RepresentativetitleofcourtesyMs.Dr.Ms.Mrs.Mr.Mr.Mr.Ms.Ms.sc-1: rn:n HR. |:nipl oyee: |select title from HR. Employeesgroup by titlehaving count(1)1)结果:empidlastnamefirstnametitle
6、titleofcourtesyi3LewJudySales ManagerMs.4PeledYaelSalesRepresentativeMrs.5BuckSvenSalesManagerMr.6SuursPaulSalesRepresentativeMr.7KingRussellSalesRepresentativeMr.8CameronMariaSalesRepresentativeMs.9DolgopyatovaZoyaSalesRepresentativeMs.对比一下发现,ID为1,2的被过滤掉了,因为他们只有一条记录如果几个ID才能区分的话,可以这么写where title+tit
7、leofcourtesy irom HR. Employeesroup by title, titleofcourtesyaving count (1)1)结果:empid lastname6Suurs7King8CameronfirstnamePaulRussellMaria9 Dolgopyatova ZoyatitleSales RepresentativeSales RepresentativeSales RepresentativeSales Representativetitleofcourtesytitle在和titleofcourtesy进行拼接后符合条件的就只有ID为6, 7
8、, 8, 9的了5、把多行SQL数据变成一条多列数据,即新增列name,|SUM (CASEWHENquarter=lTHENnumberELSE0END)一季度,|SUM (CASEWHENquarter=2THENnumberELSE0END)二季度,|SUM (CASEWHENquarter=3THENnumberELSE0END)三季度,结果:ID NAME梨子1苹果一季度二季度三季度300035004200100020004000四季度55005000我们将原来的4列增加到了 6歹L细心的朋友可能发现了这个结果和上面的行转列怎么一模一样?其实上面的行转列是省略写法,这种是比较通用的写
9、法。6、表复制语法 L Insert INTO table (f ieldl, field2, . . . ) values (valuel, value2,.)语法 2: Insert into Tablo2 (fieldl, field2, . . . ) select valuol, value2,.f romTabi el(要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Tablel的字段外,还可以插入常量。)语法 3: SELECT valel, value2 into Table2 from Tablel(要求目标表Table2不存在,因为在插入
10、时会自动创建表Table2,并将Tablel中指定字段数据复制到Table2中。)语法4:使用导入导出功能进行全表复制。如果是使用【编写查询以指定要传输的数据】,那么在大数据表的复制就会有问题?因为复制到一定程度就不再动了,内存爆了?它也没有写入到表中。而使用上面3种语法直接执行是会马上刷新到数据库表中的,你刷新一下mdf文件就知道了。7、利用带关联子查询Update语句更新数据pdate Tablelset c = (select c from Table2 where a = Tablel. a)vhere c is nullupdateset newqiantity=B. qiantit
11、y-1I -HI r. inupdate(select A. bnum , A. newqiantity, Be qiantity from Aleft join B on A. bnum=B. bnum) AS (set C. newqiantity 二 C.8、连接远程服务器方法Lselect * from openrowset(server=192. 168. 0. 1;uid=sa;pwd二password,select * from openrowset,password), ISELECT * FROM dbo. test)当然也可以参考以前的示例,建立DBLIK进行远程连接9、D
12、ate 和 Time 样式 CONVERTCONVERT)函数是把日期转换为新数据类型的通用函数。CONVERT ()函数可以用不同的格式显示日期/时间数据。语法CONVERT (data_type(length),data_to_be_converted,style)datatype (length) 规定目标数据类型(带有可选的长度)。data_to_be_converted含有需要转换的值。style规定日期/时间的输出格式。可以使用的style值:Style IDStyle格式mon dd yyyy hh:mi :ss:mmmAM (或者 PM)109或者9110mm-dd-yy111
13、yy/mm/dd112yymmdd113或者13dd mon yyyy hh:mm:ss:mmm(24h)114hh:mi:ss:mmm(24h)120或者20yyyy-mm-dd hh:mi:ss (24h)121或者21yyyy-mm-dd hh:mi:ss. mmm(24h)126yyyy-mm-ddThh: mm: ss. mmm (没有空格)130dd mon yyyy hh:mi:ss:mmmAM131dd/mm/yy hh:mi:ss:mmmAMSELECT CONVERT(varchar(100), GETDATE (), 0)SELECT CONVERT(varchar(100), GETDATE(), 1)SELECT CONVERT(varchar(100), GETDATE (), 2)ELECT CONVERT(varchar(100), GETDATE(), 3)ISELECT CONVERT (varchar (100), GETDATE (), 4)ELECT CONVERT(varchar(100), GETDATE (), 5)SELECTCONVERT (varchar (lOO),GETDATE (),6)SELECTCONVERT (varchar (100),