-
SQL处理多级分类,查询结果呈树形结构
这样处理的弊端是:如果数据量大,子分类很多,达到4级以上,这方法处理极端占用数据库连接池对性能影响很大。如果用SQL下面的CTE递归处理的话,一次性就能把结果给查询出来,而且性能很不错比用程序处理(数据量很大的情况),临时表性能更好,更方便复制代码代码如下:withareaas(select*,idpx,cast(idasnvarchar(4000))px2fromregionwhereparentid=0unionallselecta.*,b.px,b.px2+ltrim(a.region_id)fromregionajoinareabona.parentid=b.id)select*fromareaorderbypx,px2可以查询出结果—-所有分类及相应分类下子分类idtitleparentid1广东省02广州13白云区24深圳15湖南省06长沙57株洲5复制代码代码如下:withareaas(select*fromregionwhereparentid=1unionallselecta.*fromregionajoinareabona.parentid=b.id)select*...
数据库操作教程 2022-09-23 16:48:24 -
sql查询记录数结果集某个区间内记录
以查询前20到30条为例,主键名为id方法一:先正查,再反查selecttop10*from(selecttop30*fromtablenameorderbyidasc)Aorderbyiddesc方法二:使用leftjoinselecttop10A.*fromtablenameAleftouterjoin(selecttop20*fromtablenameorderbyidasc)BonA...
数据库操作教程 2022-09-23 16:48:10 -
SQL重复记录查询的几种方法
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断复制代码代码如下:select*frompeoplewherepeopleIdin(select peopleIdfrom peoplegroupby peopleIdhavingcount(peopleId)>1)2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录复制代码代码如下:deletefrompeoplewherepeopleIdin(select peopleIdfrompeoplegroupby peopleId havingcount(peopleId)>1)androwidnotin(selectmin(rowid)from peoplegroupbypeopleIdhavingcount(peopleId)>1)3、查找表中多余的重复记录(多个字段)复制代码代码如下:s...
数据库操作教程 2022-09-23 16:48:07 -
常用SQL语句(嵌套子查询/随机等等)详细整理
1.SQL插入语句得到自动生成的递增ID值复制代码代码如下:insertintoTable1(Name,des,num)values('ltp','thisisbest',10);select@@identityas'Id'2.实现是1或0想显示为男或女复制代码代码如下:selectname,Sex=(caseSexwhen'1'then'男'when'0'then'女'end)fromTablename3.嵌套子查询复制代码代码如下:selecta,b,cfromTable1whereaIN(selectafromTable2)4.显示文章、提交人和最后回复时间复制代码代码如下:selecta.title,a...
数据库操作教程 2022-09-23 16:48:06 -
存储过程实现(可带查询条件/万能分页/通用)
假设数据库中有张表,表名是UserName,字段分别是ID(int),Name(nvarchar),Age(int)。如果不带查询条件存储过程是:复制代码代码如下:CREATEPROCEDURE[dbo].[UserName]@pageIndexint,@pageSizeintASdeclare@minint;declare@maxint;set@min=@pageSize*(@pageIndex-1)+1;set@max=@pageSize*@pageIndex;withmyTableas(selectID,Name,Age,Row_Number()over(orderbyID)asrownumfrom[UserName])selectID,Name,AgefrommyTablewhererownumbetween@minand@maxRETURN这个分页存储过程很不实用,并且表是固定的...
数据库操作教程 2022-09-23 16:47:56 -
SQL直接操作excel表(查询/导入/插入)
复制代码代码如下:--配置权限EXECsp_configure'showadvancedoptions',1;GORECONFIGURE;GOEXECsp_configure'AdHocDistributedQueries',1;GORECONFIGURE;GOSQLSERVER和EXCEL的数据导入导出1、在SQLSERVER里查询Excel数据:--======================================================复制代码代码如下:SELECT*FROMOpenDataSource('Microsoft.Jet.OLEDB.4.0','DataSource="c:book1.xls";UserID=Admin;Password=;Extendedproperties=Excel5.0')...[Sheet1$]下面是个查询的示例,它通过用于Jet的OLEDB提供程序查询Excel电子表格。SELECT*FROMOpenDataSource('Microsoft.Jet.OLEDB.4.0','DataSource="c:Financeacc...
数据库操作教程 2022-09-23 16:47:48 -
关于SQLServer查询语句的使用
一.查询第二个字母是t或者a的雇员的全部信息复制代码代码如下: select* fromemployees wherefirstnamelike'_[t,a]%'注意:在sql中%表示字符串,所以不可像matlab一样用其注释,两个双斜线好像也不行,/**/可以,有网友说sql单行注释为--二.更改字段名复制代码代码如下: select'名字'=firstname,'姓氏'=lastname fromemployees wherefirstnamelike'_[t,a]%'或者复制代码代码如下: select firstnameas'名字',lastnameas'姓氏' fromemployees wherefirstnamelike'_[t,a]%'三.top关键字复制代码代码如下: /*检索出符合条件的前70%条记录*/ select top70percentfirstnameas'名字',lastnameas'姓氏' fromemployee...
数据库操作教程 2022-09-23 16:47:41 -
高效的SQLSERVER分页查询(推荐)
第一种方案、最简单、普通的方法:复制代码代码如下:SELECTTOP30*FROMARTICLEWHEREIDNOTIN(SELECTTOP45000IDFROMARTICLEORDERBYYEARDESC,IDDESC)ORDERBYYEARDESC,IDDESC 平均查询100次所需时间:45s第二种方案:复制代码代码如下:SELECT*FROM( SELECTTOP30*FROM(SELECTTOP45030*FROMARTICLEORDERBYYEARDESC,IDDESC)fORDERBYf.YEARASC,f.IDDESC)sORDERBYs.YEARDESC,s.IDDESC 平均查询100次所需时间:138S第三种方案:复制代码代码如下:SELECT*FROMARTICLEw1,( SELECTTOP30IDFROM ( &nbs...
数据库操作教程 2022-09-23 16:47:31 -
SQL多表连接查询实例分析(详细图文)
新建两张表:表1:student 截图如下:表2:course 截图如下:(此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键。)一、外连接外连接可分为:左连接、右连接、完全外连接...
数据库操作教程 2022-09-23 16:46:55 -
查询存储过程中特定字符的方法
把xx替换成具体字符,如“深圳”,sql语句如下:复制代码代码如下:select*fromuser_sourcetwhereinstr(lower(t.text),'xx')>0;select*fromall_sourcetwheret...
数据库操作教程 2022-09-23 16:46:32 -
查找sqlserver查询死锁源头的方法sqlserver死锁监控
查找出SQLServer的死锁和阻塞的源头--查找出SQLServer死锁和阻塞的源头复制代码代码如下:usemastergodeclare@spidint,@blintDECLAREs_curCURSORFORselect 0,blockedfrom(select*fromsysprocesseswhere blocked>0)awherenotexists(select*from(select*fromsysprocesseswhere blocked>0)bwherea.blocked=spid)unionselectspid,blockedfromsysprocesseswhere blocked>0OPENs_curFETCHNEXTFROMs_curINTO@spid,@blWHILE@@FETCH_STATUS=0beginif@spid=0select'引起数据库死锁的是:'+CAST(@blASVARCHAR(10))+'进程号,其执行的SQL语法如下'elseselect'进程号SPID:'+CAST(@sp...
数据库操作教程 2022-09-23 16:46:04