上一篇写的有点啰嗦,但是的确是我在开发过程中遇到的问题(特别是需求迭代更新快的公司),也是我们在平时开发过程当中值得注意的问题 ,下面在列举以下平时我们遇到的比较多的问题 也是我们值得注意的地方;
这里我们创建两张表 用户基本信息表 和角色表 见表语句如下:
用户基本信息表
插入的表数据如下 注意 后面几个用户信息的role_id 是空的
角色信息表
插入表数据如下:
1、关于 left join 和 right join的 条件放的地方不同 结果也不同
当我们查询数据库中用户的基本信息和对应的角色名称的时候 应该使用的是left join:
;这种写是没毛病的
返回结果如下:
但是当我们查询系统内的某种角色的人员信息的时候 这个时候我们的sql该怎么写呢 一般人会想到两种写法(这里只考虑用left join)
分别如下:
第一种:
该语句结果如下:所有的用户信息都查出来了 这也就是我们通常意义上的left join
第二种:
该sql的结果如下 只查询出了系统管理员的2条数据 这里就和我们用inner join 是没什么区别了:
很明显 我们要的是第二种的答案,这个时候我们就该想想 在实际开发过程中怎么准确的判断我们的条件放在哪了,
当我们 条件放在on后面的and里面 这个时候 还是以主表的数据为主(left join即左表 right join 即右表) 就是我们通常的left join 和right join,
当我们将left join(right join) 表中的条件放在了where子句里 这个left join 就变得跟inner join的效果是一样的了,这是我们通常在获取分页数据和总记录数特别需要注意的地方