关于sql的几点值得注意的地方

上一篇写的有点啰嗦,但是的确是我在开发过程中遇到的问题(特别是需求迭代更新快的公司),也是我们在平时开发过程当中值得注意的问题 ,下面在列举以下平时我们遇到的比较多的问题 也是我们值得注意的地方;

这里我们创建两张表  用户基本信息表  和角色表 见表语句如下:

用户基本信息表

插入的表数据如下 注意 后面几个用户信息的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的效果是一样的了,这是我们通常在获取分页数据和总记录数特别需要注意的地方

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值