大家好,我是IT修真院成都分院第8期的JAVA学员邹苏,一枚正直纯洁善良的java程序员。 今天给大家分享一下,修真院官网Java任务1,深度思考中的知识点————Mysql的多表查询.
多表查询:
多表查询就是在多个有逻辑联系的表之间进行的查询,逻辑关系主要是指主外键之间的联系,
在主表中的某个字段的值取自另一个表中的一个字段,就是说主表中的一个字段的值包含于另一个表的一个字段的值的集合里 。
这样的话,如果要在主表里插入数据,就必须是对应的字段的值在相应的表中存在,才有可能插入成功,如果不存在,
则肯定插入不成功(除非此字段可以为空) 。要实现多表之间的查询就要依靠表连接或者是子查询的方式实现
表连接:
普通多表查询:
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.扩展思考
关系数据库的三范式:
一范式就是属性不可分割,原子性。
二范式就是要有主键,要求其他字段都依赖于主键。
三范式就是要消除传递依赖,方便理解,可以看做是“消除冗余”
PPT :PPT
腾讯视频:
undefined_腾讯视频
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
问题:
多表的查询的性能和单表的比怎么样?
数据量大的话,多表查询一定是低效的。
在建表的时候不用外键约束可以吗?
可以不用,但是数据库正确性没有了保障。
感谢大家观看!
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~
我的邀请码:17701057,或者你可以直接点击此链接:http://www.jnshu.com/login/1/17701057
网友评论