社区
MS-SQL Server
帖子详情
INNER JOIN 表 和 WHERE 表条件的性能有差别吗?
So1o
2003-05-09 03:55:00
比如
SELECT tab_A.AAAA, tab_B.BBBB
FROM tab_A, tab_B
WHERE tab_A.ID = tab_B.ID
和
SELECT AAAA
FROM tab_A
INNER JOIN tab_B ON
tab_A.ID = tab_B.ID
在性能上有差别吗?
...全文
207
7
打赏
收藏
INNER JOIN 表 和 WHERE 表条件的性能有差别吗?
比如 SELECT tab_A.AAAA, tab_B.BBBB FROM tab_A, tab_B WHERE tab_A.ID = tab_B.ID 和 SELECT AAAA FROM tab_A INNER JOIN tab_B ON tab_A.ID = tab_B.ID 在性能上有差别吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
So1o
2003-05-09
打赏
举报
回复
收到 收到,以后看帮助就OK了
:)
CrazyFor
2003-05-09
打赏
举报
回复
Transact-SQL 参考
DBCC CHECKIDENT
检查指定表的当前标识值,如有必要,还对标识值进行更正。
语法
DBCC CHECKIDENT
( 'table_name'
[ , { NORESEED
| { RESEED [ , new_reseed_value ] }
}
]
)
参数
'table_name'
是要对其当前标识值进行检查的表名。表名必须符合标识符规则。有关更多信息,请参见使用标识符。指定的表必须包含标识列。
NORESEED
指定不应更正当前标识值。
RESEED
指定应该更正当前标识值。
new_reseed_value
是在标识列中重新赋值时要使用的值。
注释
如有必要,DBCC CHECKIDENT 会更正列的当前标识值。然而,如果标识列是使用 NOT FOR REPLICATION 子句(在 CREATE TABLE 或 ALTER TABLE 语句中)创建的,则不更正当前标识值。
如果标识列上有主键或唯一键约束,无效标识信息可能会导致错误信息 2627。
对当前标识值所做的具体更正取决于参数规范。
DBCC CHECKIDENT 语句 所做的标识更正
DBCC CHECKIDENT ('table_name', NORESEED) 不重置当前标识值。DBCC CHECKIDENT 返回一个报表,它指明当前标识值和应有的标识值。
DBCC CHECKIDENT ('table_name') 或
DBCC CHECKIDENT ('table_name', RESEED) 如果表的当前标识值小于列中存储的最大标识值,则使用标识列中的最大值对其进行重置。
DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value) 当前值设置为 new_reseed_value。如果自创建表后没有将行插入该表,则在执行 DBCC CHECKIDENT 后插入的第一行将使用 new_reseed_value 作为标识。否则,下一个插入的行将使用 new_reseed_value + 1。如果 new_reseed_value 的值小于标识列中的最大值,以后引用该表时将产生 2627 号错误信息。
当前标识值可以大于表中的最大值。在此情况下,DBCC CHECKIDENT 并不自动重置当前标识值。若要在当前标识值大于列中的最大值时对当前标识值进行重置,请使用两种方法中的任意一种:
执行 DBCC CHECKIDENT ('table_name', NORESEED) 以确定列中的当前最大值,然后使用 DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value) 语句将该值指定为 new_reseed_value。
将 new_reseed_value 置为很小值来执行 DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value),然后运行 DBCC CHECKIDENT ('table_name', RESEED)。
结果集
不管是否指定任何选项(针对于包含标识列的表;下例使用 pubs 数据库的 jobs 表),DBCC CHECKIDENT 返回以下结果集(值可能会有变化):
Checking identity information: current identity value '14', current column value '14'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
权限
DBCC CHECKIDENT 权限默认授予表所有者、sysadmin 固定服务器角色和 db_owner 固定数据库角色的成员且不可转让。
示例
A. 如有必要,重置当前标识值
下例在必要的情况下重置 jobs 表的当前标识值。
USE pubs
GO
DBCC CHECKIDENT (jobs)
GO
B. 报告当前标识值
下例报告 jobs 表中的当前标识值;如果该标识值不正确,并不对其进行更正。
USE pubs
GO
DBCC CHECKIDENT (jobs, NORESEED)
GO
C. 强制当前标识值为 30
下例强制 jobs 表中的当前标识值为 30。
USE pubs
GO
DBCC CHECKIDENT (jobs, RESEED, 30)
GO
请参见
ALTER TABLE
CREATE TABLE
DBCC
IDENTITY(属性)
USE
©1988-2000 Microsoft Corporation。保留所有权利。
psxfghost
2003-05-09
打赏
举报
回复
但是
SELECT AAAA
FROM tab_A
left JOIN tab_B ON
tab_A.ID = tab_B.ID
和
SELECT AAAA
FROM tab_A
inner JOIN tab_B ON
tab_A.ID = tab_B.ID
不一样,前者若不满足条件的话,它也将tab_A所有数据列出,
只是在无对应数据的那一行,将tab_A表的数据置NULL
psxfghost
2003-05-09
打赏
举报
回复
一样的!
如果你不是很清楚,可以去查一下帮助!
So1o
2003-05-09
打赏
举报
回复
还有一个问题
怎样更改标识列的起始数字?
wuqiuzhi
2003-05-09
打赏
举报
回复
不清楚,帮你顶一下。
CrazyFor
2003-05-09
打赏
举报
回复
一样.
SQL精华(PPT)
例如,`
INNER
JOIN
`用来返回两个
表
中匹配的记录,而`LEFT
JOIN
`则返回左
表
的所有记录及右
表
与之匹配的记录。 在高级查询中,我们有子查询的概念,即一个查询嵌套在另一个查询之中,可以用于复杂的数据分析。比如,`...
inner
join
和 left
join
限制
条件
放在 where 和 on 后面 有什么区别?
1.
inner
join
和 left
join
限制
条件
放在 where 和 on 后面 有什么区别? 先说结论: 用
inner
join
, LEFT
JOIN
时,
条件
直接放ON后面,是先筛选后连接,
条件
放WHERE后面,是先连接后筛选
inner
join
A
inner
join
B ...
left
join
inner
join
on 和where区别
在使用left
join
时,on和where
条件
的区别: 1:on
条件
是在生成临时
表
时使用的
条件
,它不管on中的
条件
是否为真,都会返回左边
表
中的记录。 2:where
条件
是在临时
表
生成好后,再对临时
表
进行过滤的
条件
。这时已经...
inner
join
on 和 where 的区别
(其他
JOIN
参数也是显性连接)WHERE和
INNER
JOIN
产生的连接关系,没有本质区别,结果也一样。但是!隐性连接随着数据库语言的规范和发展,已经逐渐被淘汰,比较新的数据库语言基本上已经抛弃了隐性连接,全部采用...
inner
join
和where 区别
(其他
JOIN
参数也是显性连接)WHERE 和
INNER
JOIN
产生的连接关系,没有本质区别,结果也一样。但是!隐性连接随着数据库语言的规范和发展,已经逐渐被淘汰,比较新的数据库语言基本上已经抛弃了隐性连接,全部采用...
MS-SQL Server
34,838
社区成员
254,632
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章