CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

SQL Server的连接查询???

楼主lanlansky(EjbPro)2005-06-21 14:23:12 在 MS-SQL Server / 应用实例 提问

SELECT                     COUNT(*)  
  FROM     a   ,     b  
  where   a.NO   =   b.NO  
  and   a.NO   in   (  
  SELECT       NO  
  FROM     c   )  
  -----------------------------------------  
   
  SELECT                     COUNT(*)  
  FROM         a   ,   b   ,c  
  where     a.NO   =   b.NO  
  and   a.NO   =   c.NO  
  -------------------------------------------  
   
   
  以上两个sql,我认为执行结果应该是一样的,即选出的count值,应该相等,可是为什么我在实际环境中执行等到不同的结果,第二个sql选出的件数要多一些,这是为什么?  
  环境sqlServer2000  
   
  我记得这样的写法,再oracle中会选到一样的结果!为什么在sqlServer中会这样? 问题点数:100、回复次数:7Top

1 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-06-21 14:34:35 得分 50

导致这种问题的原因在于表C中的NO存在重复的值  
   
  SELECT  
          COUNT(*)  
  FROM  
          a   ,b  
  where    
          a.NO   =   b.NO  
          and    
          a.NO   in   (SELECT   NO   FROM   c)  
   
  与楼下的查询结果应该是一致的  
   
  SELECT    
          COUNT(*)  
  FROM  
          a   ,   b   ,(select   distinct   NO   from   c)   d  
  where  
          a.NO   =   b.NO  
          and  
          a.NO   =   d.NOTop

2 楼venket(创业先锋)回复于 2005-06-21 14:36:13 得分 10

那个是数据库里面特有的连接机制啊!Top

3 楼paoluo(一天到晚游泳的鱼)回复于 2005-06-21 14:37:19 得分 10

如果C表中一个NO会有多条记录的话,第二条语句得出来的count值的确要多些。  
   
  Top

4 楼pbsql(风云)回复于 2005-06-21 14:37:53 得分 10

以上两个sql,如果NO在c表中唯一,那么执行结果应该是一样的,如果不唯一则不等,举例:  
  a中数据:  
  1  
  2  
   
  b中数据:  
  2  
  3  
   
  c中数据:  
  2  
  2  
  3  
  前者返回1,后者返回2Top

5 楼paoluo(一天到晚游泳的鱼)回复于 2005-06-21 14:38:41 得分 10

--建立测试环境  
  Create   Table   A(NO Int,Name   Varchar(10))  
  Create   Table   B(NO Int,Address   Varchar(10))  
  Create   Table   C(NO Int,Remark   Varchar(10))  
   
  Insert   A   Values(1,'AA')  
  Insert   A   Values(2,'BB')  
  Insert   A   Values(3,'CC')  
   
  Insert   B   Values(1,'ShangHai')  
  Insert   B   Values(2,'ShangHai')  
  Insert   B   Values(3,'ShangHai')  
   
  Insert   C   Values(1,'KK')  
  Insert   C   Values(1,'KKKK')  
  Insert   C   Values(2,'TTT')  
  GO  
  --测试  
  SELECT                     COUNT(*)  
  FROM     a   ,     b  
  where   a.NO   =   b.NO  
  and   a.NO   in   (  
  SELECT       NO  
  FROM     c   )  
   
  SELECT                     COUNT(*)  
  FROM         a   ,   b   ,c  
  where     a.NO   =   b.NO  
  and   a.NO   =   c.NO  
  --删除测试环境  
  Drop   Table   A,B,C  
  --结果  
  /*  
  2  
   
  3  
  */Top

6 楼hsj20041004(光芒)回复于 2005-06-21 14:43:23 得分 10

-------------------------------  
  看看表中是否存在重复记录  
  select   no,count(*)   from   a   group   by   no  
  select   no,count(*)   from   c   group   by   noTop

7 楼lanlansky(EjbPro)回复于 2005-06-21 14:47:48 得分 0

多些各位  
   
  顺便问一下,那个写法效率高一点?Top

相关问题

  • SQL SERVER 查询
  • SQL中的连接查询....
  • 关于SQL 连接 查询
  • sql server 2000的查询分析器可以连接sql server 2005吗?
  • SQL 查询分析器无法连接上本地的SQL Server,郁闷...
  • SQL SERVER查询优化,连接(JION),OR,AND优化的原理!(有理者给分)
  • 查询分析器无法连接到SQL Server数据库服务器
  • sql server连接
  • Sql Server连接
  • 连接SQL SERVER

关键词

  • 执行
  • 数据
  • sql
  • noand
  • bwhere
  • noint
  • shanghai
  • 结果
  • insert
  • 值

得分解答快速导航

  • 帖主:lanlansky
  • libin_ftsafe
  • venket
  • paoluo
  • pbsql
  • paoluo
  • hsj20041004

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo