分享人:张泉良
1.背景介绍
2.知识剖析
3.常见问题
4.编码实战
5.扩展思考
6.参考文献
7.更多讨论
对象之间很少是孤立的,所以表与表之间也是有关系的,多表联合查询是一个很常见的操作
简单说:根据特定的连接条件从不同的表中获取所需的数据
(1)基本的连接类型
内连接: 用(=,<,>)来配置每个表相同的行
外联接包括左外连接,右外连接,同时返回左(右)表中的数据
full join (mysql不支持,但是可以用 left join union right join代替
不要忽略连接条件,否则会产生笛卡尔积
A表10万行,B表1万行,则笛卡尔积为10万*1万==10亿行
SELECT table1.column, table2.column FROM table1, table2
(1) 查询编写的注意点
进来避免在where子句对字段判空,可以为null的字段设置默认值,比如0
尽量使用数字型字段:字符类会逐个比较字符串
(2) 多表查询索引的建立
单列索引与多列索引
多列索引:过合并(concatenate)索引列值创建的值的一个排序数组
索引匹配原则
最左原则: mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配 以及结果集最小
(3) 如何通过mysql的explain优化sql
具体参数:https://www.jianshu.com/p/ea3fc71fdc45解决多表查询还哪些方法
mybatis 有级联查询 association或者collection
hibernate 有对应many-to-many,one-to-many,many-to-one
对于同样的需求,使用联表查询和非联表查询的对比
放弃联表查询:字段容易修改,数据表可能不在同一库中
https://blog.csdn.net/leshami/article/details/5563199
https://my.oschina.net/githubhty/blog/874082
https://blog.csdn.net/lemon_tree12138/article/details/50921193
欢迎大家讨论