MySQL踩过的那些坑

  • SQL执行顺序
  1. from
  2. join
  3. on
  4. where
  5. group by(开始使用select中的别名,后面的语句都可以使用)
  6. avg sum(聚合函数)
  7. having
  8. select
  9. distinct
  10. order by
  11. limit

从这个顺序不难发现,所有的查询语句都是从from开始执行的,在执行过程中,每个步骤都会为下一个步骤生成一个结果集,这个结果集将作为下一个执行步骤的输入。

  • LEFT JOIN中,on和where条件的区别
  1. on条件是在生成临时表时使用的条件,它不管on后所带的条件是否为真,都会返回做表中的记录
  2. where条件是先生成临时表后,再对临时表进行过滤的条件。这时已经没有LEFT JOIN的含义了,条件不为真就全部过滤掉。

 

  • INNER JOIN中,on和where条件的区别

使用join时,过滤条件写在on或者where之后,返回的结果是一样的,那么他们的执行效率哪个更高,还是一样的?

 

  • ORDER BY与LIMIT一起使用的陷阱

MySql在执行limit的时候不会查询到所有的结果集,而是找到符合条件的行后立刻返回。Order by排序的时候,如果排序字段值相同,那么这些相同值所在的记录的顺序是随机的,但对于同一个结果集,其顺序也是固定的。因此当limit与order by一起使用时,如果遇到相同的排序字段值,加上limit的取值不同,会导致排序不稳定,出现在第一页的记录可能会出现在第二页。

 

  • MySQL函数的使用
  1. DATE_FORMAT函数中,时间格式应为标准时间格式,否则返回null
  2. CONCAT函数中,如果有一个值是null,则返回null
  3. FIND_IN_SET函数中,如果有一个值是null,则返回false

 

  • UNION和NUION ALL的使用
  1. 都是对两个结果集进行并集操作,上下SQL语句中查询的字段要相同
  2. UNION对两个结果集进行并集操作,不包括重复行,同时进行默认规则排序,默认规则为查询的第一个字段的升序。
  3. UNION ALL对两个结果集进行并集操作,包括重复行,不进行排序
  4. 可以在最后一个结果集中指定order by子句改变排序方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值