Mysql的多表查询

java分享会

分享人:邹苏

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

产生背景

2.知识剖析

多表查询:

多表查询就是在多个有逻辑联系的表之间进行的查询,逻辑关系主要是指主外键之间的联系, 在主表中的某个字段的值取自另一个表中的一个字段,就是说主表中的一个字段的值包含于另一个表的一个字段的值的集合里 。

这样的话,如果要在主表里插入数据,就必须是对应的字段的值在相应的表中存在,才有可能插入成功,如果不存在, 则肯定插入不成功(除非此字段可以为空) 。要实现多表之间的查询就要依靠表连接或者是子查询的方式实现

表连接:

普通多表查询: select 列1... from 表1,表2... where... 在from之后可以有很多表,每个表之间用,隔开,from后面的表会做笛卡尔积 表与表之间做笛卡尔积,然后就能查询出来了

两个集合X和Y的笛卡尓积(Cartesian product), 又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。

内连接:

语法:select 列from 表1 别名 inner join 表2 别名 on 表1.列=表2.列,...

from开始,表1与表2进行笛卡尔积,每匹配一行的数据,就会通过on后条件判断 是否成立,就将该行匹配的信息存放到临时表,否则不存放

外连接:

左外连接:左表中所有的记录都会被放到结果集中,无论是否在右表是否存在匹配记录

语法:select 列 from 表1 left outer join 表2 on 表1.列=表2.列

右外连接:不管是否成功匹配连接条件都会返回右表中的所有记录

语法: select 列 from 表1 right outer join 表2 on 表1.列=表2.列

全外连接:在mysql中没有全外连接,可以使用union实现 即是select...左连接 union select ... 右连接... 表1 full outer join 表2 on ...

3.常见问题

表之间的约束

数据库中的完整性约束用来防止对数据的意外破坏,来保证数据的安全性和一致性。 通常我们都需要对数据库的某些列加上合适的约束来防止程序bug等导致的数据不一致, 因为这类数据不一致的问题排查起来很困难。mysql中的完整性约束主要包括主键、外键 (参照完整性约束)、唯一约束、非空约束等。

外键约束

外键用来指定参照完整性约束,被指定为外键的列必需要有索引,外键参考列必需为另一个表的主键。

语法:CONSTRAINT 外键约束名 FOREIGN KEY (本表字段名) REFERENCES 参照表名 (参照表字段名)

alter table 表名 add constraint 外键约束名 FOREIGN KEY(本表字段名) REFERENCES 参照表名 (参照表字段名);

5.编码实战

6.扩展思考

关系数据库的三范式:

一范式就是属性不可分割,原子性。

二范式就是要有主键,要求其他字段都依赖于主键。

三范式就是要消除传递依赖,方便理解,可以看做是“消除冗余”

7.参考文献

http://blog.csdn.net/jintao_ma/article/details/51260458

http://blog.csdn.net/github_37767025/article/details/67636061

http://blog.csdn.net/u012723798/article/details/47189479

8.更多讨论

鸣谢

感谢观看,如有出错,恳请指正

BY : 邹苏