仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 703|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL编程:实战SQL语句搜集(不休更新中--)

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:25:10 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Federated将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用语句
实战SQL语句搜集(不休更新中--)

媒介:这里将我编程理论中碰到的有代价的sql语句一起记上去,一方面便利本人查用,一方面也夯实下行将忘记的回想。全部过程当中我会不休更新,直到不克不及再加为止,同时,这里只纪录最有用的咚咚,不效仿学院派的那一套。

 

1、经常使用SQL语句聚集

1,查询:

1.1,复杂查询:select*fromtablewhere



1.2,毗连查询:

甚么是毗连查询?顾名释义,就是查询时触及多个表的查询。是以说到毗连,空话一下,要晓得毗连仍是干系数据库的次要特性呢。

毗连查询分为三种:外毗连(OUTERJOIN),内毗连(INNERJOIN),交织毗连(CROSSJOIN)。

1.2.1,内毗连(INNERJOIN)利用对照运算符举行表间某(些)列数据的对照操纵,并列出这些表中与毗连前提相婚配的数据行。依据所利用的对照体例分歧,内毗连又分为等值毗连、天然毗连和不等毗连三种。

1.2.2,外毗连分为左外毗连(LEFTOUTERJOIN或LEFTJOIN)、右外毗连(RIGHTOUTERJOIN或RIGHTJOIN)和全外毗连(FULLOUTERJOIN或FULLJOIN)三种。与内毗连分歧的是,外毗连不但列出与毗连前提相婚配的行,而是列出左表(左外毗连时)、右表(右外毗连时)或两个表(全外毗连时)中一切切合搜刮前提的数据行。

1.2.3,交织毗连(CROSSJOIN)没有WHERE子句,它前往毗连表中一切数据行的笛卡尔积,其了局汇合中的数据行数即是第一个表中切合查询前提的数据行数乘以第二个表中切合查询前提的数据行数。毗连操纵中的ON(join_condition)子句指出毗连前提,它由被毗连表中的列和对照运算符、逻辑运算符等组成。

1.2.4,不管哪一种毗连都不克不及对text、ntext和image数据范例列举行间接毗连,但能够对这三种列举行直接毗连。比方:

SELECTp1.pub_id,p2.pub_id,p1.pr_info
FROMpub_infoASp1INNERJOINpub_infoASp2
ONDATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)



1.2.5,利用WHERE子句设置查询前提

WHERE子句设置查询前提,过滤失落不必要的数据行。比方上面语句查询岁数年夜于20的数据:

SELECT*

FROMusertable

WHEREage>20

WHERE子句可包含各类前提运算符:

对照运算符(巨细对照):>、>=、=、<、<=、、!>、!<

局限运算符(表达式值是不是在指定的局限):BETWEEN…AND…

NOTBETWEEN…AND…

列表运算符(判别表达式是不是为列表中的指定项):IN(项1,项2……)

NOTIN(项1,项2……)

形式婚配符(判别值是不是与指定的字符通配格局符合):LIKE、NOTLIKE

空值判别符(判别表达式是不是为空):ISNULL、NOTISNULL

逻辑运算符(用于多前提的逻辑毗连):NOT、AND、OR

1、局限运算符例:ageBETWEEN10AND30相称于age>=10ANDage<=30

2、列表运算符例:countryIN(Germany,China)

3、形式婚配符例:经常使用于含混查找,它判别列值是不是与指定的字符串格局相婚配。可用于char、varchar、text、ntext、datetime和smalldatetime等范例查询。

可以使用以下通配字符:

百分号%:可婚配恣意范例和长度的字符,假如是中文,请利用两个百分号即%%。

下划线_:婚配单个恣意字符,它经常使用来限定表达式的字符长度。

方括号[]:指定一个字符、字符串或局限,请求所婚配工具为它们中的任一个。

[^]:其取值也[]不异,但它请求所婚配工具为指定字符之外的任一个字符。

比方:

限定以Publishing开头,利用LIKE%Publishing

限定以A开首:LIKE[A]%

限定以A开首外:LIKE[^A]%

空值判别符例:WHEREageISNULL

2,更新:updatetable

 

3,拔出:

3.1,一样平常拔出:

INSERTINTOpublishers
(pub_id,pub_name,city,state)
VALUES
(9001,AcmePublishing,NewYork,NY)

3.2,拔出多行

利用INSERT语句能够向表增加多行数据。这些多行数据是从已存有这些数据的另外一个表当选取的。本例中,向pubhold表中增加有关在加利福尼亚和德克萨斯州的出书商的数据。这些数据可从publishers表中取得。

INSERTpubhpoldSELECT*FROMpublishers
WHEREstate=CAORstate=TX

 

4,删除:

4.1,Delete语句团结删除:

DELETEFROMuu_SuiteToMinClassroomSect

WHEREmin_classroom_sect_idIN

(SELECTmin_classroom_sect_id

FROMuu_MinClassroomSect

WHEREmin_classroom_id=112)

2、视图利用细则

1,一个典范的视图

CREATEVIEWView_uuGroupTaxis

AS

SELECTuu_GroupInfo.group_id,uu_GroupInfo.group_name,

uu_GroupType.main_type,uu_GroupType.group_type_name,

uu_GroupInfo.group_icon_url,ISNULL

((SELECTCOUNT(*)

FROMuu_GroupUser

WHEREuu_GroupInfo.group_id=uu_GroupUser.group_id),0)

*50+ISNULL(uu_GroupInfo.fundCount,0)+ISNULL

((SELECTCOUNT(*)

FROMDv_Topic

WHEREDv_Topic.BoardID=uu_GroupInfo.subforum_id),0)*5+ISNULL

((SELECTCOUNT(*)

FROMuu_GroupPhotos

WHEREuu_GroupPhotos.group_id=uu_GroupInfo.group_id),0)

*10+ISNULL(uu_GroupInfo.topic_account,0)

*2+ISNULL(uu_GroupInfo.hit_account,0)ASgroup_ActiveDegree,

ISNULL

((SELECTCOUNT(*)

FROMuu_GroupUser

WHEREuu_GroupInfo.group_id=uu_GroupUser.group_id),0)

ASgroup_memberNum,ISNULL(uu_GroupInfo.fundCount,0)ASfundCount,

(SELECTCOUNT(*)

FROMDv_Topic

WHEREDv_Topic.BoardID=uu_GroupInfo.subforum_id)ASgroup_articleNum,

(SELECTCOUNT(*)

FROMuu_GroupPhotos

WHEREuu_GroupPhotos.group_id=uu_GroupInfo.group_id)ASgroup_PhotoNum,

uu_GroupInfo.topic_account,uu_GroupInfo.hit_account,

(SELECTuser_name

FROMuu_RegisterUser

WHEREuu_RegisterUser.user_id=uu_GroupInfo.creator_id)

ASgroup_CreatorName,uu_GroupInfo.create_time

FROMuu_GroupInfoINNERJOIN

uu_GroupTypeON

uu_GroupInfo.group_type_id=uu_GroupType.group_type_id



三,存储历程的创立和挪用

1,存储历程的挪用

ExecuteprocedureName@param=’value’

2,一个典范的带参数存储历程

CREATEPROCEDUREP_delMiniclassProc

@miniClassroom_idint

AS

declare@billtagvarchar(4)

setnocounton

IF@miniClassroom_idisnull

begin

return(-1)

end

else

BEGINTRANSACTION

--删除套餐信息

DELETEFROMuu_SuiteToMinClassroomSect

WHEREmin_classroom_sect_idIN

(SELECTmin_classroom_sect_id

FROMuu_MinClassroomSect

WHEREmin_classroom_id=@miniClassroom_id)

--删除小教室段信息

deletefromuu_MinClassroomSect

wheremin_classroom_id=@miniClassroom_id

--删除小教室用户购置纪录

deletefromuu_UserBuyMinClassroom

wheremin_classroom_id=@miniClassroom_id

--删除对应小教室年级学科信息

deletefromuu_MinClassroomToGradeClass

wheremin_classroom_id=@miniClassroom_id

--删除小教室讲话

deletefromuu_MinClassroomDiscuss

wheremin_classroom_id=@miniClassroom_id

--删除课程会商

DELETEFROMuu_CourseDiscuss

WHEREcourse_idIN

(SELECTcourse_id

FROMuu_CourseInfo

WHEREmin_classroom_id=@miniClassroom_id)

--删除用户课程保藏

DELETEFROMuu_UserCellectionCourse

WHEREcourse_idIN

(SELECTcourse_id

FROMuu_CourseInfo

WHEREmin_classroom_id=@miniClassroom_id)

--删除小教室小课程的用户购置信息

DELETEFROMuu_UserBuyCourse

WHEREcourse_idIN

(SELECTcourse_id

FROMuu_CourseInfo

WHEREmin_classroom_id=@miniClassroom_id)

commitTRANSACTION

return(1)

GO

四,触发器
如果WHERE子句的查询条件里使用比较操作符LIKE和REGEXP,MySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说,如果查询条件是LIKEabc%‘,MySQL将使用索引;如果查询条件是LIKE%abc’,MySQL将不使用索引。
第二个灵魂 该用户已被删除
沙发
 楼主| 发表于 2015-2-4 15:44:07 | 显示全部楼层
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-9 03:44

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表