当前位置:   article > 正文

SQL查询语句分步详解——ORDER BY命令_.orderby(true,true,orderbysql);

.orderby(true,true,orderbysql);

order by 命令:

        1.书写顺序

              SELECT 字段,函数,子查询

                     FROM 表名

                     WHERE 定位数据行判断条件

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

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

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

 

        2.执行顺序

                     FROM-->WHERE-->GORUP BY-->HAVING-->SELECT-->ORDER BY

 

        3.执行原理:

                     order by 负责将SELECT命令生成的临时表数据行进行重新排序。然后将排序后数据行保存到一个全新临时表中。

 

硬盘上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

需求:查询部门20下职员信息,按照工资进行升序排列

SQL:  select

                deptno,ename,job,sal

      from  

                emp

      where 

                deptno = 20

      ORDER BY 

                sal asc      #这里的sal是字段名,asc不是按升序排列,如果是desc就是按降序排列

第一步:执行FROM EMP

           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 DEPTNO = 20

           这个命令的执行会对第一个临时表进行遍历,对满足DEPTNO = 20 的数据行进行定位,将满足条件的数据行全部拿出来组成一个新的临时表(第二个临时表),第二个临时表生成后,第一个临时表会被销毁。

第二个临时表

EMPNO

ENAME

JOB

MGR

HIREDATE

SAL

COMM

DEPTNO

7369

SMITH

CLERK

7902

1980/12/17

800

NULL

20

7566

JONES

MANAGER

7839

1981/4/2

2975

NULL

20

7788

SCOTT

ANALYST

7566

1987/4/19

3000

NULL

20

7876

ADAMS

CLERK

7788

1987/5/23

1100

NULL

20

7902

FORD

ANALYST

7566

1981/12/3

3000

NULL

20

第三步:执行SELECT DEPTNO ENAME JOB SAL

           因为SELECT 命令操作的是由WHERE命令提供的临时表,这个临时表只有一个,SELECT命令就会像切蛋糕一样,将查询字段下的内容全部取出,将取出的内容组成一个新的临时表(第三个临时表),第三个临时表生成后,第二个临时表就会被销毁。

第三个临时表

DEPTNO

ENAME

JOB

SAL

20

SMITH

CLERK

800

20

JONES

MANAGER

2975

20

SCOTT

ANALYST

3000

20

ADAMS

CLERK

1100

20

FORD

ANALYST

3000

第四步:执行 ORDER BY SAL ASC

           这个命令会对SELECT命令生成的临时表(第三个临时表)进行排序操作(本例中是对sal字段下的内容按升序排序),将排序后的数据保存到一个新临时表中(第四个临时表),此表生成后,第三个临时表被销毁。

第四个临时表

DEPTNO

ENAME

JOB

SAL

20

SMITH

CLERK

800

20

ADAMS

CLERK

1100

20

JONES

MANAGER

2975

20

SCOTT

ANALYST

3000

20

FORD

ANALYST

3000

最后,MySQL数据库会将最后一个临时表推送给客户端,供操作者查阅。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/944441
推荐阅读
相关标签
  

闽ICP备14008679号