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 |