MySQL-分页查询-视图

分页查询

当每次查询的记录数比较大,通常一页显示不下,此时我们可以进行分页查询。

语法:  limit  begin , size;
   begin:记录的开始行数. 偏移量
   size:每页的最大记录数。

注意:limit后可以是一个参数,一个参数时,指每次最大的查询记录数(一页显示的数量),limit size,默认记录数从0开始,而不是1.

练习:按照员工编号降序排序,查询第二页的数据,每页5条。
select * from emp order by empno DESC limit 5,5;

还可以使用子查询,先排序,再查询每页的数据

练习:按照员工工资降序排序,查询第二页的数据,每页6条。
select e.* from (select * from emp order by sal desc) e limit 6,6;

当我们在做分页查询的时候,查询的效率与偏移量有关系,偏移量越大,效率越低,消耗的时间就会越多,,我们可以先使用子查询来确定偏移量的位置,在进行分页查询

-- (1)子查询先确定偏移量的位置。
    select tid from temp_001 limit 100000,1
-- (2)再进行分页查询
    select * from where tid>=(查出id的值) limit 100;
--练习:
select * from temp_001 where tid>=
(select tid from temp_001 limit 144000,1) limit 100;

还有一种优化:首先确定tid必须是连续的数据。使用  between and 
 

select * from temp_001 where tid between 145000 and 145200 limit 100;

视图VIEW

表的一部分投影。也是数据库里一个对象。(表的虚拟部分),因为视图中含有某表中的部分数据,不在视图中的字段有隐藏效果。所以相对来说,安全。视图可以像表一样,进行增删改查。
格式:create view ViewName as subQuery

删除视图:drop view viewName

视图的分类:
    简单视图:subQuery是一个表中的普通查询语句
    复杂视图:subQuery是一个可以带有分组函数的,或者关联查询的语句。复杂视图不能对视图进行DML操作,只能进行DQL操作

练习: 将员工表中的10部门的数据封装到一个视图view_emp_deptno_10
create view view_emp_deptno_10 as select * from emp where deptno=10;

通过视图进行DML操作,一定会对表有影响。通过表进行DML操作,可能会对视图有影响。

with check option:对视图的一种检查约束选项,如果在创建视图有此选项时,表示,只能对视图DML操作可见数据。反之,对视图不可见的数据,是不可以通过视图进行DML操作的。
 

练习:创建一个视图view_emp_deptno_20,投影20号部门的 员工编号,员工姓名,职位,工资,部门号。
create view view_emp_deptno_20 as select empno,ename,job,sal,deptno
from emp where deptno = 20 with check option;
练习:创建一个复杂视图view_emp_100,是每个部门的平均工资,最高工资,最低工资,及其部门号。
create view view_emp_100 as select avg(ifnull(sal,0)) avg_sal,max(sal) max_sal,
min(sal) min_sal,deptno from emp group by deptno;
select * from view_emp_100;

猜你喜欢

转载自blog.csdn.net/woainiqazwsx123/article/details/82593928