信天游机票验真打印:有一个Oracle中的SQL查询语句的问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 12:50:04
现在有一个SQL语句,有点不理解,请高手指点,先谢谢了。
表A:
CD Age
1000 70
1001 80
1002 90
1003 100
表B:
CD ID
1000 11
1001 22
1002 NULL
查询语句是:
select A.CD,B.ID
from A,B
where A.CD = B.CD(+) AND
B.ID(+) = 11
查询结果是:
1000 11
1001 NULL
1002 NULL
1003 NULL
这个查询我本以为是错的,因为对B.ID(+)=11我不太理解,请高手给我解释一下这个查询语句是如何执行的。
我对SQL文还是知道的,也知道where后的第一个条件是外连接,但对AND后面的那个B.ID(+) = 11条件很不理解,还请高手解释。。。。。
先谢谢 柏祖连 的回答,但我真的没看懂,是我比较愚钝了,希望能再解释清楚点,谢谢!
另外,δCat的答案我也看了下,如果按照你的说法,最好的运行结果只有一行了:1000 11
所以还是不对。。。。。。
请会的高手再解答下

双表查询:
简单说了
仔细的说如下(也是简单,还是你学学吧)
select A.CD,B.ID from A,B
用select 先选择a表的cd字段 b表的ID做为,两个表的查询依据,查出两个表中所有CD,ID 两个字段的内容
那个from后面的a,b指的要查的表。后面一句where a.cd=b.cd(+)ad...是条件,也就是说符合a表.cd标准的b表中的id字值和cd字同时为11的列表值。
在意如此。
总的来说,是查一个固定ID排序值,其中B.ID(+)=11不是结果,B.CD(+) AND
B.ID(+) = 11
加起来满足a.cd才是结果。而这里的b.id(+)=11是指定查询,(这里是独立理解,因为你这句中还有一个条件为B.CD(+) 其它他和B.ID(+) 意思一样如果这样写
A.CD = B.ID(+)ANDB.CD(+)
= 11是一样的,之后一个等号后面的是限制范围。(语文没学好,不会表达,不好意思,如果看到我这句之后感觉更迷湖了,就拿刀砍我吧)

在 ORACLE 中, + 表示 半连接,+在=左边,表示左连接,+在=右边表示右连接。

A.CD = B.CD(+) AND B.ID(+) = 11

上面这个意思是 :
(A.CD = B.CD or B.CD IS NULL) AND (B.ID = 11 or B.ID IS NULL)

不太明白,请教高人了