主页»数据库»数据库表衔接的简略解说

数据库表衔接的简略解说

来历:阮一峰 发布时刻:2019-01-16 阅览次数:

联络型数据库最难的当地,便是建模(model)。

扑朔迷离的数据,需求树立模型,才干贮存在数据库。所谓"模型"便是两样东西:实体(entity)+ 联络(relationship)。

实体指的是那些实践的目标,带有自己的特色,能够了解成一组相关特色的容器。联络便是实体之间的联络,一般能够分红"一对一"、"一对多"和"多对多"等类型。

在联络型数据库里边,每个实体有自己的一张表(table),一切特色都是这张表的字段(field),表与表之间依据相关字段"衔接"(join)在一同。所以,表的衔接是联络型数据库的核心问题。

表的衔接分红好几种类型。

  • 内衔接(inner join)
  • 外衔接(outer join)
  • 左衔接(left join)
  • 右衔接(right join)
  • 全衔接(full join)

曾经,许多文章选用维恩图(两个圆的调集运算),解说不同衔接的差异。

上星期,我读到一篇文章,以为还有比维恩图更好的解说办法。我发现的确如此,换一个视点解说,更简略懂。

所谓"衔接",便是两张表依据相关字段,组合成一个数据集。问题是,两张表的相关字段的值往往是不一致的,假如相关字段不匹配,怎样处理?比方,表 A 包括张三和李四,表 B 包括李四和王五,匹配的只要李四这一条记载。

很简略看出,一共有四种处理办法。

  • 只回来两张表匹配的记载,这叫内衔接(inner join)。
  • 回来匹配的记载,以及表 A 剩余的记载,这叫左衔接(left join)。
  • 回来匹配的记载,以及表 B 剩余的记载,这叫右衔接(right join)。
  • 回来匹配的记载,以及表 A 和表 B 各自的剩余记载,这叫全衔接(full join)。

下图便是四种衔接的图示。我觉得,这张图比维恩图更易懂,也更精确。

上图中,表 A 的记载是 123,表 B 的记载是 ABC,色彩表明匹配联络。回来成果中,假如另一张表没有匹配的记载,则用 null 填充。

这四种衔接,又能够分红两大类:内衔接(inner join)表明只包括匹配的记载,外衔接(outer join)表明还包括不匹配的记载。所以,左衔接、右衔接、全衔接都归于外衔接。

这四种衔接的 SQL 句子如下。

SELECT * FROM A  
INNER JOIN B ON A.book_id=B.book_id;

SELECT * FROM A  
LEFT JOIN B ON A.book_id=B.book_id;

SELECT * FROM A  
RIGHT JOIN B ON A.book_id=B.book_id;

SELECT * FROM A  
FULL JOIN B ON A.book_id=B.book_id;

上面的 SQL 句子还能够加上where条件从句,对记载进行挑选,比方只回来表 A 里边不匹配表 B 的记载。

SELECT * FROM A
LEFT JOIN B
ON A.book_id=B.book_id
WHERE B.id IS null;

另一个比如,回来表 A 或表 B 一切不匹配的记载。

SELECT * FROM A
FULL JOIN B
ON A.book_id=B.book_id
WHERE A.id IS null OR B.id IS null;

此外,还存在一种特别的衔接,叫做"穿插衔接"(cross join),指的是表 A 和表 B 不存在相关字段,这时表 A(共有 n 条记载)与表 B (共有 m 条记载)衔接后,会发生一张包括 n x m 条记载的新表(见下图)。

(完)

QQ群:凯发娱乐官网官方群(515171538),验证音讯:10000
微信群:加小编微信 849023636 邀请您参加,验证音讯:10000
提示:更多精彩内容重视微信大众号:全栈开发者中心(fsder-com)
m88 188bet uedbet 威廉希尔 明升 bwin 明升88 bodog bwin 明升m88.com 18luck 188bet unibet unibet Ladbrokes Ladbrokes casino m88明升 明升 明升 m88.com 188bet m88 明陞 uedbet赫塔菲官网 365bet官网 m88 help
188bet www.188bet.com bwin 平博 unibet 明升 188bet uk Ladbrokes 德赢vwin 188bet m88.com w88 平博88 uedbet体育 188bet 188bet 威廉希尔 明升体育app 平博88 M88 Games vwin德赢 uedbet官网 bodog fun88 188bet
网友谈论(共0条谈论) 正在载入谈论......
沉着谈论文明上网,回绝歹意咒骂 宣布谈论 / 共0条谈论
登录会员中心