关于查询效率

cyc308 2007-02-16 03:00:08
问题一.
表达式1:select a.*,b.* from a inner join b on a.id=b.id
表达式2:select a.*,b.* from a,b where a.id=b.id
两个表达式哪个效率高?
问题二.
以上两个表达式查询后的结果会出现如下情况:
a.name b.name
------------------
name 2 names 2
name1 2 names 2 '这行的names 2 并不存在数据!如果不想使用默认上行的数据应该如何解决?
多谢!
...全文
270 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yijibo 2007-02-27
  • 打赏
  • 举报
回复
最好用INNER JOIN
cyc308 2007-02-16
  • 打赏
  • 举报
回复
那就是说要想不重复,就得让条件ID不重复.

再问一下,什么是分区视图?
是在大数据量下使用吗?
如何使用???
先谢啦.-0- 要学得东西可真多啊,
Hinco 2007-02-16
  • 打赏
  • 举报
回复
前两个语句速度差不多
select a.*,b.* from a,b where a.id=b.id 等同于
select a.*,b.* from a cross join b where a.id=b.id
但因为有限制条件所以相当于内连接,速度和第一句几乎没有差别
至于cyc308() 的需求比较特别,按照你的意思,你想要的连接条件根本不是a.id=b.id
a.id=b.id就是得出那个结果
你想要得是a.rowid=b.rowid,很可惜SQLServer2000没有rowid的用法
cyc308 2007-02-16
  • 打赏
  • 举报
回复
a表
id name
1 cc1
2 cc2
3 cc3
3 cc4
--------
b表
id name
1 cc11
2 cc22
3 cc33
表达式1:select a.*,b.* from a inner join b on a.id=b.id
结果:
1 cc1 1 cc11
2 cc2 2 cc22
3 cc3 3 cc33
3 cc4 3 cc33 '问题就是这个cc33在表b并没有存在!如何才能将其显示成null或其他自定义的值?
jinyu2883163 2007-02-16
  • 打赏
  • 举报
回复
第一个问题中的两个语句执行过程是一样的,为什么第一个快,可以给我例子吗
一者仁心 2007-02-16
  • 打赏
  • 举报
回复
你想要显示出来的样子 说一下 没明白你具体意思
一者仁心 2007-02-16
  • 打赏
  • 举报
回复
你显示的不是a.name和b.name么 相应的列
cyc308 2007-02-16
  • 打赏
  • 举报
回复
例如: select a.id,isnull(b.id,0) from a inner join b on a.id=b.id
可结果并没有什么改变?
cyc308 2007-02-16
  • 打赏
  • 举报
回复
我用了isnull()为什么没有效果呢?
一者仁心 2007-02-16
  • 打赏
  • 举报
回复
第一个速度快 第二个相当于交叉联接
恶意用 isnull(字段,要替换的值)来替换出现null的值
可以用gruoping 了解是不是系统生成的null

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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