SQL查询语句分步详解------limit命令:

limit命令:

        1.书写顺序:(这里的内容就是单表查询中的七个查询命令,它们放在一起时的书写顺序,可以说是七个查询命令大总结

                  SELECT 字段,函数,子查询

                  FROM   表

                  WHERE  定位数据行条件【关系运算/逻辑运算/特殊运算符】

                  GROUP BY 分组字段1,分组字段2

                  HAVING 对临时表进行删除判断条件

                  ORDER BY 排序字段1,排序字段2

                  Limit  起始行位置,从起始行开始向下截取行数

 

            【注意:在MySQL中字段的排序从1开始,而数据行的排序从0开始】

    【需要注意:查询语句中的所有标点符号必须是英文半角状态下书写的】

       2.执行顺序:(这就是单表查询中七个查询命令的执行顺序大总结

                    FROM-->WHERE-->GROUP BY-->HAVING-->SELECT-->ORDER BY-->LIMIT

       3.执行原理:

                 从临时表指定位置的数据行开始,向下截取指定数量的数据行。将截取出来的数据行保存到一个全新的临时表。

        4.特点:LIMIT 总是在最后执行。

硬盘上EMP.frm

EMPNO

ENAME

JOB

MGR

HIREDATE

SAL

COMM

DEPTNO

7369

SMITH

CLERK

7902

1980/12/17

800

NULL

20

7499

ALLEN

SALESMAN

7698

1981/2/20

1600

300

30

7521

WARD

SALESMAN

7698

1981/2/22

1250

500

30

7566

JONES

MANAGER

7839

1981/4/2

2975

NULL

20

7654

MARTIN

SALESMAN

7698

1981/9/28

1250

1400

30

7698

BLAKE

MANAGER

7839

1981/5/1

2850

NULL

30

7782

CLARK

MANAGER

7839

1981/6/9

2450

NULL

10

7788

SCOTT

ANALYST

7566

1987/4/19

3000

NULL

20

7839

KING

PRESIDENT

1981/11/17

5000

NULL

10

7844

TURNER

SALESMAN

7698

1981/9/8

1500

0

30

7876

ADAMS

CLERK

7788

1987/5/23

1100

NULL

20

7900

JAMES

CLERK

7698

1981/12/3

950

NULL

30

7902

FORD

ANALYST

7566

1981/12/3

3000

NULL

20

7934

MILLER

CLERK

7782

1982/1/23

1300

NULL

10

需求:查询销售人员工资排在前两位的职员信息

SQL:

      select

              *

      from

              emp

      where

              job = 'salesman'

      order by

              sal desc

      limit

              0,2

第一步:执行 from emp

           执行时生成第一个临时表

第一个临时表

EMPNO

ENAME

JOB

MGR

HIREDATE

SAL

COMM

DEPTNO

7369

SMITH

CLERK

7902

1980/12/17

800

NULL

20

7499

ALLEN

SALESMAN

7698

1981/2/20

1600

300

30

7521

WARD

SALESMAN

7698

1981/2/22

1250

500

30

7566

JONES

MANAGER

7839

1981/4/2

2975

NULL

20

7654

MARTIN

SALESMAN

7698

1981/9/28

1250

1400

30

7698

BLAKE

MANAGER

7839

1981/5/1

2850

NULL

30

7782

CLARK

MANAGER

7839

1981/6/9

2450

NULL

10

7788

SCOTT

ANALYST

7566

1987/4/19

3000

NULL

20

7839

KING

PRESIDENT

1981/11/17

5000

NULL

10

7844

TURNER

SALESMAN

7698

1981/9/8

1500

0

30

7876

ADAMS

CLERK

7788

1987/5/23

1100

NULL

20

7900

JAMES

CLERK

7698

1981/12/3

950

NULL

30

7902

FORD

ANALYST

7566

1981/12/3

3000

NULL

20

7934

MILLER

CLERK

7782

1982/1/23

1300

NULL

10

第二步:执行 where job = 'salesman'

           1.对满足job = 'salesman'条件的数据行进行定位

           2.将这些被定位的数据行放在一起存放的一个新的临时表中,这个临时表(第二个临时表)生成后,第一个临时表会被销毁。

第二个临时表

EMPNO

ENAME

JOB

MGR

HIREDATE

SAL

COMM

DEPTNO

7499

ALLEN

SALESMAN

7698

1981/2/20

1600

300

30

7521

WARD

SALESMAN

7698

1981/2/22

1250

500

30

7654

MARTIN

SALESMAN

7698

1981/9/28

1250

1400

30

7844

TURNER

SALESMAN

7698

1981/9/8

1500

0

30

第三步:执行 select *

           这个命令由于查询的是所有字段信息,为此第二个临时表的内容会被完整切过来组成第三个临时表,新的临时表生成后,第二个临时表被销毁。

第三个临时表

EMPNO

ENAME

JOB

MGR

HIREDATE

SAL

COMM

DEPTNO

7499

ALLEN

SALESMAN

7698

1981/2/20

1600

300

30

7521

WARD

SALESMAN

7698

1981/2/22

1250

500

30

7654

MARTIN

SALESMAN

7698

1981/9/28

1250

1400

30

7844

TURNER

SALESMAN

7698

1981/9/8

1500

0

30

第四步:执行 order by sal desc

           这个命令的执行会对第桑临时表中的数据按照sal字段的内容按降序排列,排序后的数据组成一个全新的临时表(第四个临时表),此时第三个临时表会被销毁。

第四个临时表

EMPNO

ENAME

JOB

MGR

HIREDATE

SAL

COMM

DEPTNO

7499

ALLEN

SALESMAN

7698

1981/2/20

1600

300

30

7844

TURNER

SALESMAN

7698

1981/9/8

1500

0

30

7654

MARTIN

SALESMAN

7698

1981/9/28

1250

1400

30

7521

WARD

SALESMAN

7698

1981/2/22

1250

500

30

第五步:执行 limit 0,2

           这个命令的执行会从第一行开始,连续取出两行数据,组成一个新的临时表(第五个临时表),第四个临时表会被销毁。

第五个临时表

EMPNO

ENAME

JOB

MGR

HIREDATE

SAL

COMM

DEPTNO

7499

ALLEN

SALESMAN

7698

1981/2/20

1600

300

30

7844

TURNER

SALESMAN

7698

1981/9/8

1500

0

30

最后,MySQL服务器会将第五个临时表作为结果推送给客户端,供操作者查阅。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值