免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1428 | 回复: 1
打印 上一主题 下一主题

请教:SQL 中 (+) 的含义 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-14 11:09 |只看该作者 |倒序浏览
T1:
ID    |  TYPE
------+--------
001  | 00
001  | 01
002  | 00
003  | 00

SQL1:
SELECT
*
FROM
T1
WHERE
T1.ID(+) = '001'


SQL2:
SELECT
*
FROM
T1
WHERE
T1.ID = '001'

执行的效果是一样的,字段(+)=值 是什么意思?怎么理解?

论坛徽章:
0
2 [报告]
发表于 2006-06-14 13:45 |只看该作者
做了两张表试验了一下,结果如下:
因为只是通过运行结果猜测,所以可能有理解错误的地方,希望大家指正
sql1:
SELECT
  *
FROM
  T1, T2
WHERE
      T1.C1 = T2.C2(+)
  AND T1.C2 = T2.C2(+)
  AND T1.C3(+) = 'XXX'
  AND T2.C3(+) = 'YYY'
相当于:--------------------------------------------------------------------
sql2:
SELECT
  *
FROM
  T1
LEFT JOIN
  T2
ON
  T1.C1 = T2.C2 AND T1.C2 = T2.C2 AND T2.C3 = 'YYY'
WHERE
  T1.C3 = 'XXX'

T1.C3(+) = 'XXX'会影响到选择结果的纪录数,而 T2.C3(+) = 'YYY'不会影响到选择结果的纪录数,所以 T1.C3(+) = 'XXX'等同于T1.C3 = 'XXX'
也就是说,sql1 等同于:
sql3:
SELECT
  *
FROM
  T1, T2
WHERE
      T1.C1 = T2.C2(+)
  AND T1.C2 = T2.C2(+)
  AND T1.C3 = 'XXX'
  AND T2.C3(+) = 'YYY'

关于"字段(+)=值",是不是可以这样理解:
如果“字段(+)”是主表(T1)的字段,那么选择结果中不会出现“字段 <> 值”的记录。
如果“字段(+)”是连接表(T2)的字段,那么选择结果中,“字段 <> 值”的记录可以被选出来,但记录中T2表的相关字段的值都是NULL。

我这么理解的是否正确? 欢迎大家指正
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP