FROM命令:
1.执行顺序:
mysql共有七个查询命令,FROM命令永远是第一个执行的查询命令
2.执行作用:
FROM命令相当于一个读取流;负责将硬盘上表文件加载到内存中生成一个【临时表】,供后续查询命令使用。
*****由于查询命令对临时表数据进行操作,因此查询命令执行时,是不会修改表文件原有的数据*****
| 硬盘上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 |
需求:在EMP表中查询所有职员的姓名、工作岗位及薪水
对应的SQL语句:SELECT ENAME,JOB,SAL FROM EMP;
第一步执行: 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 |
第二步执行: SELECT ENAME,JOB,SAL
1.SELECT由于在FROM之后执行的,因此操作的是由FROM命令在内存中生成的第一个临时表。
2.SELECT像切蛋糕一样,将指定字段下所有的数据读取出来,并在内存中将读取数据组成一个全新的临时表。
下面的临时表就是由SELECT语句生成的第二个临时表,该临时表生成以后,由FROM命令生成的第一个临时表就会被销毁,然后MySQL就会将最后生成的临时表推送到客户端,供操作者查阅。到此查询语句完成查询任务。
| ENAME | JOB | SAL |
| SMITH | CLERK | 800 |
| ALLEN | SALESMAN | 1600 |
| WARD | SALESMAN | 1250 |
| JONES | MANAGER | 2975 |
| MARTIN | SALESMAN | 1250 |
| BLAKE | MANAGER | 2850 |
| CLARK | MANAGER | 2450 |
| SCOTT | ANALYST | 3000 |
| KING | PRESIDENT | 5000 |
| TURNER | SALESMAN | 1500 |
| ADAMS | CLERK | 1100 |
| JAMES | CLERK | 950 |
| FORD | ANALYST | 3000 |
| MILLER | CLERK | 1300 |

466

被折叠的 条评论
为什么被折叠?



