SQL基础(一)

  • 问 介绍下数据库分页
    原理: 使用LIMIT子句实现分页查询
  • 在所有的查询结果中,返回前5行记录。
    SELECT prod _name FROM products LIMIT 5;
  • 在所有的查询结果中,从第5行开
    始,返回5行记录。
    SELECT prod_ name FROM products LIMIT 5, 5;

优化LIMIT分页:
在偏移量大的时候,例如LIMIT 10000,20. 这是MySQL需要查询10020条记录,只返回最后20条.代价过高,需要优化

  1. 索引
    用索引覆盖扫描,而不是查询所有的列,然后根据需要做一次关联操作再返回所需列

SELECT film.id,description FROM sakila.film ORDER BY title LIMIT 50,5;

若表的数据量非常大,可以使用如下查询

SELECT film.film_id,film.description FROM sakila.film INNER JOIN (SELECT film_id FROM sakila.film ORDER BY title LIMIT 50,5) AS lim USING(film_id)

  • 问 说一说数据库的左连接和右连接
    答:
  1. 左外连接:可以简称为左连接(LEFT JOIN),它会返回左表中的所有记录和右表中满足连接条件的记录
  2. 右外连接: 可以简称为右连接(RIGHT JOIN),它会返回右表中的所有记录和左表中满足连接条件的记录.
  • 问 where和having有什么区别?
    答: where是一个约束声明.使用where约束来自数据库的数据.where是在结果返回之前起作用的,where中不能使用聚合函数.
    having是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在having中可以使用聚合函数. 另一方面,having子句中不能使用除了分组字段和聚合函数之外的其他字段.
    从性能角度来说,having子句中如果使用了分组字段作为过滤条件,应该替换成where子句,因为where可以在执行分组操作和计算聚合函数之前过滤掉不需要的数据,性能会更好
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。