SQL语句写法.docx

上传人:b****1 文档编号:3316251 上传时间:2023-05-05 格式:DOCX 页数:7 大小:64.29KB
下载 相关 举报
SQL语句写法.docx_第1页
第1页 / 共7页
SQL语句写法.docx_第2页
第2页 / 共7页
SQL语句写法.docx_第3页
第3页 / 共7页
SQL语句写法.docx_第4页
第4页 / 共7页
SQL语句写法.docx_第5页
第5页 / 共7页
SQL语句写法.docx_第6页
第6页 / 共7页
SQL语句写法.docx_第7页
第7页 / 共7页
亲,该文档总共7页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

SQL语句写法.docx

《SQL语句写法.docx》由会员分享,可在线阅读,更多相关《SQL语句写法.docx(7页珍藏版)》请在冰点文库上搜索。

SQL语句写法.docx

SQL语句写法

SQLSERVER2005语句写法

主要内容

1、LEFTJOIN、RIGHTJOIN与INNERJOIN用区别与用法

2、WITHAS用法

3、不使用NOTIN语句

4、不使用XX字段=(表查询)语法

5、聚集索引与非聚集索引使用介绍

6、索引创建以及优化

7、联合表更新、删除写法以及批量INSERT

8、WITH(NOLOCK)

 

1、LEFTJOIN与INNERJOIN用区别与用法

leftjoin(左连接)返回包括左表中的所有记录和右表中连接字段相等的记录

rightjoin(右连接)返回包括右表中的所有记录和左表中连接字段相等的记录

innerjoin(等值连接)只返回两个表中连接字段相等的行

表值如:

左连接结果:

SELECT*FROMPC_Usera

LEFTJOINPC_ScorebONa.UserID=b.UserID

右连接结果:

SELECT*FROMPC_Usera

RIGHTJOINPC_ScorebONa.UserID=b.UserID

等值连接结果:

SELECT*FROMPC_Usera

INNERJOINPC_ScorebONa.UserID=b.UserID

左右连接附加条件写法:

SELECT*FROMPC_Usera

LEFTJOINPC_ScorebONa.UserID=b.UserIDANDb.CourseID='a'

如果写成:

SELECT*FROMPC_Usera

LEFTJOINPC_ScorebONa.UserID=b.UserID

WHEREb.CourseID='a'

等同于:

SELECT*FROMPC_Usera

INNERJOINPC_ScorebONa.UserID=b.UserID

WHEREb.CourseID='a'

多次使用同一张表

SELECT*FROMPC_Usera

INNERJOINPC_ScorebONa.UserID=b.UserIDAndb.CourseID='a'

LeftJOINPC_ScorecONa.UserID=c.UserIDAndc.CourseID='b'

2、WITHAS用法

WITHtmpas(SELECT*FROMPC_ScoreWHERECourseID='a')

SELECT*FROMPC_Usera

INNERJOINtmpbONa.UserID=b.UserID

WITHtmpas(select*fromPC_ScorewhereScore=100)

SELECT*FROmPC_Usera

LEFTJOINtmpbona.UserID=b.UserID

 

3、不使用NOTIN语句

写法:

SELECT*FROMPC_User

WhereUserIDNOTIN(SelectUserIDFromPC_ScoreWherescore=100)

改为:

SELECTa.*FROmPC_Usera

LEFTJOINPC_Scorebona.UserID=b.UserIDANDscore=100

Whereb.UserIDIsNULL

4、不使用XX字段=(表查询)语法

SELECTUserID,UserNameFROMPC_User

WHEREUserID=(SELECTUserIDFromPC_ScoreWherescore=100)

出错:

子查询返回的值不止一个。

当子查询跟随在=、!

=、<、<=、>、>=之后,或子查询用作表达式时,这种情况是不允许的。

改为:

SELECTdistincta.UserID,a.UserNameFROMPC_Usera

INNERJOInPC_Scorebona.UserID=b.UserID

WHEREb.score=100

或者

SELECTa.UserID,a.UserNameFROMPC_Usera

INNERJOInPC_Scorebona.UserID=b.UserID

WHEREb.score=100

GROUPBYa.UserID,a.UserName

 

5、聚集索引与非聚集索引使用情况说明

⏹最大不同在于物理存储结构不同。

⏹聚集索引是根据索引字段进行数据的物理排序。

⏹非聚集索引类似书本索引,索引与数据存放在不同的物理区域。

如,当前字段数据值为10,15,30

A、使用聚集索引,添加数据20时,数据库将进行物理IO 移动,将(30移动后面)然后添加数据。

物理结果为:

10,15,20,30

B、利用非聚集索引,添加数据20时,数据库不进行物理 移动,直接将数据添加到文件末尾,然后建立索引指针。

物理结果为:

10,15,30,20

什么时候用聚集索引和非聚集索引呢?

情况如下:

如果字段为自增字段,记流水字段,而且大部分情况下是顺序添加的话,可以用聚集索引

如果字段值存储如用户名这样的结果,如果采用聚集索引,每次添加用户都需要进行移动IO,影响性能,这时候就采用非聚集索引。

6、索引创建以及优化

索引就是在数据库查询的时候提供快捷查找的指针。

索引的建立的时候要根据SQL语法来创建,最关键的时索引字段的顺序。

建立索引语法:

CREATEINDEX索引名称ON表(字段1,字段2)INCLUDE(字段)

删除索引语法:

DROPINDEX索引名称ON表

CREATEINDEXidx_PC_Score_score1onPC_Score(score)include(UserID)

 

优化索引:

SELECT*FROMAccMain.dbo.Jx_InfowhereOpenID<200

SELECTMemberID,FullNameFROMAccMain.dbo.Jx_InfowhereOpenID<200

CreateIndexidx_Jx_Info_OpenIDONAccMain.dbo.Jx_info(OpenID)

CreateIndexidx_Jx_Info_OpenIDONAccMain.dbo.Jx_info(OpenID)include(MemberID,FullName)

DropIndexidx_Jx_Info_OpenIDONAccMain.dbo.Jx_info

7、联合表更新、删除写法

SELECT*

--UpdatebSetscore=100

--Deleteb

FROMPC_Usera

INNERJOINPC_ScorebONa.UserID=b.UserID

whereb.CourseID='a'

批量INSERTINTO:

INSERTINTOPC_Score(UserID,CourseID,Score)

SelectUserID,'d',60FromPC_User

批量替换更新:

UpdatePC_ScoreSetCourseID=Replace(CourseID,'a','e')WHEREScore=100

8、WITH(NOLOCK)

情况:

每次SQL查询(如Select)会产生共享锁,在此期间影响到的表为只读,不允许进行修改操作。

优点:

如果在查询的时候添加上with(nolock)将不会产生共享锁,可以提高查询速度的同时不影响修改操作。

缺点:

会产生脏读,数据完整性要求比较严格的场景就不合适了,如财务结算,支付等环节。

用法如下:

SELECT*FROM表WITH(NOLOCk)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2