- SQL执行顺序
- from
- join
- on
- where
- group by(开始使用select中的别名,后面的语句都可以使用)
- avg sum(聚合函数)
- having
- select
- distinct
- order by
- limit
从这个顺序不难发现,所有的查询语句都是从from开始执行的,在执行过程中,每个步骤都会为下一个步骤生成一个结果集,这个结果集将作为下一个执行步骤的输入。
- LEFT JOIN中,on和where条件的区别
- on条件是在生成临时表时使用的条件,它不管on后所带的条件是否为真,都会返回做表中的记录
- where条件是先生成临时表后,再对临时表进行过滤的条件。这时已经没有LEFT JOIN的含义了,条件不为真就全部过滤掉。
- INNER JOIN中,on和where条件的区别
使用join时,过滤条件写在on或者where之后,返回的结果是一样的,那么他们的执行效率哪个更高,还是一样的?
- ORDER BY与LIMIT一起使用的陷阱
MySql在执行limit的时候不会查询到所有的结果集,而是找到符合条件的行后立刻返回。Order by排序的时候,如果排序字段值相同,那么这些相同值所在的记录的顺序是随机的,但对于同一个结果集,其顺序也是固定的。因此当limit与order by一起使用时,如果遇到相同的排序字段值,加上limit的取值不同,会导致排序不稳定,出现在第一页的记录可能会出现在第二页。
- MySQL函数的使用
- DATE_FORMAT函数中,时间格式应为标准时间格式,否则返回null
- CONCAT函数中,如果有一个值是null,则返回null
- FIND_IN_SET函数中,如果有一个值是null,则返回false
- UNION和NUION ALL的使用
- 都是对两个结果集进行并集操作,上下SQL语句中查询的字段要相同
- UNION对两个结果集进行并集操作,不包括重复行,同时进行默认规则排序,默认规则为查询的第一个字段的升序。
- UNION ALL对两个结果集进行并集操作,包括重复行,不进行排序
- 可以在最后一个结果集中指定order by子句改变排序方式