内连接
会根据where 条件,对交叉连接的结果进行过滤,返回符合条件的数据
左连接
left join
1. 得到的结果是 左主表中的数据条数,右辅表没有匹配数据就是 匹配空
2. 注意如果 右辅表的关联数据不唯一,就会多出好多数据,这是因为如果右表有两条匹配数据,就会产生两条相同的左表数据
3. 解决右数据唯一的方法是利用右表的主键进行分组,借助聚合函数获取唯一的匹配关联字段
4. 可以通过 (+)标注哪个表是一个匹配表
exists
1 表示有存在结果就显示结果集, 检测行的存在
2 每扫描一次主表 其实是对exists中的表操作结果只是返回true或false
3.当exists中表的数据大的时候比较快,而且是走索引的
4.查询先执行主表
in
1是对in中的数据集进行了缓存,每执行一次主表都会对子表结果遍历一次,但它in中的语句只执行一次
2in是不走索引的查询
3 当in中的表的结果集比较小的时候合适
4.查询先执行子表
会根据where 条件,对交叉连接的结果进行过滤,返回符合条件的数据
左连接
left join
1. 得到的结果是 左主表中的数据条数,右辅表没有匹配数据就是 匹配空
2. 注意如果 右辅表的关联数据不唯一,就会多出好多数据,这是因为如果右表有两条匹配数据,就会产生两条相同的左表数据
3. 解决右数据唯一的方法是利用右表的主键进行分组,借助聚合函数获取唯一的匹配关联字段
4. 可以通过 (+)标注哪个表是一个匹配表
exists
1 表示有存在结果就显示结果集, 检测行的存在
2 每扫描一次主表 其实是对exists中的表操作结果只是返回true或false
3.当exists中表的数据大的时候比较快,而且是走索引的
4.查询先执行主表
in
1是对in中的数据集进行了缓存,每执行一次主表都会对子表结果遍历一次,但它in中的语句只执行一次
2in是不走索引的查询
3 当in中的表的结果集比较小的时候合适
4.查询先执行子表