比较两SQL语句

3721_zcx 2013-02-19 02:38:08
请问以下两中SQL语句,哪种写法更规范,更省时间?
select BaseCate from KnowledgeBaseCate where PareBase= (select PareBase from KnowledgeBaseCate where BaseCate='BCD')

select KBC_1.BaseCate from KnowledgeBaseCate KBC_1, KnowledgeBaseCate KBC_2 where KBC_1.PareBase=KBC_2.PareBase and KBC_1.BaseCate='BCD'
...全文
1616 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
3721_zcx 2013-02-25
  • 打赏
  • 举报
回复
引用 15 楼 tanleittl 的回复:
引用 14 楼 ZhangCaixia_China 的回复:引用 12 楼 tanleittl 的回复: SQL code?12345678--给你提供一个吧select BaseCate from KnowledgeBaseCate a where exists ( select 1 from KnowledgeBaseCate b ……
感谢!
DBA_磊仔 2013-02-22
  • 打赏
  • 举报
回复
引用 14 楼 ZhangCaixia_China 的回复:
引用 12 楼 tanleittl 的回复: SQL code?12345678--给你提供一个吧select BaseCate from KnowledgeBaseCate a where exists ( select 1 from KnowledgeBaseCate b where b.BaseCate='BCD' ……
Exists 判断里面 select 子句是没有意义的,数据库只判断是否存在,不判的select 的值 ,所以 select 1,select 0,select * 都是一样的
3721_zcx 2013-02-22
  • 打赏
  • 举报
回复
引用 12 楼 tanleittl 的回复:
SQL code?12345678--给你提供一个吧select BaseCate from KnowledgeBaseCate a where exists ( select 1 from KnowledgeBaseCate b where b.BaseCate='BCD' ……
请教:select 1 from ……,这个没用过,为何使用select 1 ?
Rotel-刘志东 2013-02-20
  • 打赏
  • 举报
回复
具体的要看执行计划,不同的应用性能是有差别的。
DBA_磊仔 2013-02-20
  • 打赏
  • 举报
回复
--给你提供一个吧
select BaseCate 
from KnowledgeBaseCate a 
where exists (
				select 1 from KnowledgeBaseCate b 
				where b.BaseCate='BCD' 
					and a.PareBase = b.PareBase
			)
發糞塗牆 2013-02-20
  • 打赏
  • 举报
回复
看执行计划,不同的数据和应用都会影响效率。不能仅仅看查询。
3721_zcx 2013-02-20
  • 打赏
  • 举报
回复
引用 5 楼 budong0000 的回复:
目测两表一样,直接 select BaseCate from KnowledgeBaseCate where BaseCate='BCD' and PareBase is not null 表不一样,也要看子查询数据大小,server 会自动优化查询计划,一般数据量小in就可以了,大就第二种
嗯……你的这个SQL语句查不出我想要的结果。 我是想先查出BCD的上级,然后再查其上级的所有子级。 也就是最终要的是BCD的同级
3721_zcx 2013-02-20
  • 打赏
  • 举报
回复
引用 3 楼 szm341 的回复:
-.-这有意义吗,直接查询最快了
我以为这两个就已经是直接查询了,我不知道还有哪种写法。 其实这个SQL就是求‘BCD’的同级
3721_zcx 2013-02-20
  • 打赏
  • 举报
回复
引用 1 楼 happyflystone 的回复:
两句有可比性吗?
例子很小,但代表的是两种不同的写法。 我想知道,在数据量大的情况下,最好用哪种?
rucypli 2013-02-19
  • 打赏
  • 举报
回复
看执行计划吧
极地_雪狼 2013-02-19
  • 打赏
  • 举报
回复
select KBC_1.BaseCate from KnowledgeBaseCate KBC_1 inner jion KnowledgeBaseCate KBC_2 on KBC_1.PareBase=KBC_2.PareBase and KBC_1.BaseCate='BCD'
budong0000 2013-02-19
  • 打赏
  • 举报
回复
目测两表一样,直接 select BaseCate from KnowledgeBaseCate where BaseCate='BCD' and PareBase is not null 表不一样,也要看子查询数据大小,server 会自动优化查询计划,一般数据量小in就可以了,大就第二种
-Tracy-McGrady- 2013-02-19
  • 打赏
  • 举报
回复
如果你第一种方式中子查询出来的不是一条,而是多条,那你的第一种语句就要出错了。
szm341 2013-02-19
  • 打赏
  • 举报
回复
-.-这有意义吗,直接查询最快了
manchiu00 2013-02-19
  • 打赏
  • 举报
回复
有可比性!应该是带子查询的那个快吧!
-狙击手- 2013-02-19
  • 打赏
  • 举报
回复
两句有可比性吗?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧