理解联结表,必须先了解基本知识。
1.关系表
比如设计博客表时,博客的类型可以是直接放在博客表中,但是这会存在一个问题,很多博客的类型其实是相同的,每次创建文章都重写一遍过于麻烦,且如果要修改1种类型,必须一个个修改,这是无法忍受的,最好的方式就是单独建立一个博客类型表,通过字段与博客表建立关系,这样可以修改,引用都会方便很多。
2.为什么使用联结
将数据分解为多个表能有效地存储,更方便的管理,可伸缩性(能适应不断增加的工作量而不失败)也更好。
但是分散的表,对于汇总数据比较麻烦,这时就引出-联结了。联结是一种机制,用来在一条SELECT语句中关联表,因此称为联结。使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中的正确的行。
3.创建联结
创建联结非常简单,指定要联结的所有表以及关联它们的方式即可。
例子如下:
SELECT title, readNum, category FROM
blog_blogmodel, blog_blogtype WHERE blog_blogmodel.category_id = blog_blogtype.id;
从blog表中查询标题,阅读数,和博客类型(在type表中),从上面可以看出写出要查询的字段和字段所在的表,该语句就成功了一半,关键在于WHERE子句,在blog表中category_id对应type表中的id,这就是关联方式(这两个使用外键联结).
效果:
4.WHERE子句的重要性
联结两个表时,实际要做的是将第一个表中的每一行与第二个表中的每一行配对。WHERE子句作为过滤条件,只包含那些匹配给定条件(这里是联结条件)的行。没有WHERE子句,第一个表中的每一行将与第二个表中的每一行配对,而不管它们逻辑上是否能配在一起。
笛卡尔积:由没有联结条件的表关系返回的结果为笛卡尔积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。
没有WHERE子句时的结果:
从上面的输出可以看出,相应的笛卡尔积不是我们想要的。
提示:有时,返回笛卡尔积的联结,也称为叉联结。
5.内联结
目前为止使用的联结为等值联结,它基于两表之间的相等测试。这种联结也称为内联结(inner join)。可以对这种联结用稍微不同的语法,明确指定联结的类型。下面的例子与前面的例子的返回结果完全相同。
SELECT title, readNum, category, category_id FROM blog_blogmodel INNER JOIN blog_blogtype ON
blog_blogmodel.category_id = blog_blogtype.id;
使用INNER JOIN这种语法是SQL推荐的写法,但是相对于之前的语法来说比较复杂,具体使用看自己的选择。
6.联结多个表
SELECT不限制使用联结表的数量。但是指定的联结表多了,会产生严重的性能问题。
评论列表
已有0条评论