注册账号 登录
用友之家-用友软件论坛 返回首页

wozengcong的个人空间 https://www.oyonyou.com/?242966 [收藏] [复制] [分享] [RSS]

日志

sql中内联 和外联 区别

热度 1已有 634 次阅读2012-7-9 21:07 |个人分类:SQL数据库资料| 概念, 看书

这个概念一般看书不好理解。其实夜简单。有例子就简单了。

比如:

表A(主表)
cardid       username
16              aa
23              bb
25              cc
29              dd
30              ee

表B(子表)
countid cardid score
1            16          34
2            25          300
3            29          1.5

cardid 列上联接 A 表和 B 表。

分别用内联、外联试试。

内联:
SELECT cardid FROM A INNER JOIN B ON (A.cardid<>B.cardid)
那么这样查询就会交叉地拿A和B去比较,上例来说就是拿『16,23,25,29,30』和16,25,29比。那么显然<>的结果是:23,25,29,30,16,25,29,30。。。不符合我们的要求。因为内联本来就只有找相同的功能,没有找不同的功能。

左外联:
SELECT cardid FROM A LEFT OUTER JOIN B ON (B.cardid=A.cardid) WHERE B.cardid IS NULL
这里会拿左表(A)的所有行去和B比较,上例来说是『16,23,25,29,30』先和16比较,然后再和23比较。它将包括所有A表内容,而对应的B表,符合条件就打印,否则没有的话会为null。所以这样就按要求得到了为null的值,也就是缺少的。

右外联:
SELECT cardid FROM A RIGHT OUTER JOIN B ON (B.cardid=A.cardid) WHERE B.cardid IS NULL
这里会拿右表(B)的所有行去和A比较,上例来说是16,25,29和『16,23,25,29,30』比较。结果只包含B表的所有行。在这里显然不符合要求。

但SELECT cardid FROM B RIGHT OUTER JOIN A ON (B.cardid=A.cardid) WHERE B.cardid IS NULL是对的。事实上右外联都是通过转换为左外联实现的。


路过

雷人

握手
1

鲜花

鸡蛋

刚表态过的朋友 (1 人)

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册账号

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-6-6 00:25 , Processed in 0.021332 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部