SQL查询语句分步详解——SELECT...FROM...WHERE...

WHERE命令:

         1.书写顺序:

                       SELECT 字段名,函数,子查询

                       FROM 表文件

                       WHERE 关系运算/逻辑运算

         2.执行顺序:FROM-->WHERE-->SELECT

         3.WHERE作用:

                      循环遍历临时表所有的数据行,每次得到一个数据行,根据数据行信息判断数据行是否需要被定位,在循环完毕后,

              where命令将所有定位的数据行读取出来,在内存生成一个临时表对这些数据进行保存。

硬盘上EMP.frm

EMPNO

ENAME

JOB

MGR

HIREDATE

SAL

COMM

DEPTNO

7369

SMITH

CLERK

790 2

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

需求: 查询所有职位是clerk的职员姓名、岗位和工资信息

SQL语句:   SELECT

                                     ENAME,JOB,SAL

                     FROM

                                     EMP

                     WHERE

                                     JOB = 'CLERK';

第一步: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 = 'CLERK'

         1.循环遍历时,定位职位是clerk的数据行

         2.循环遍历结束后,将满足定位条件的数据行读取出来,生成一个全新的临时表(第二个临时表),第二个临时表生成后,第一个临时表被销毁。

第二个临时表

EMPNO

ENAME

JOB

MGR

HIREDATE

SAL

COMM

DEPTNO

7369

SMITH

CLERK

7902

1980/12/17

800

NULL

20

7876

ADAMS

CLERK

7788

1987/5/23

1100

NULL

20

7900

JAMES

CLERK

7698

1981/12/3

950

NULL

30

7934

MILLER

CLERK

7782

1982/1/23

1300

NULL

10

第三步: select ename, job, sal

        对上一个(第二个)临时表进行操作,开始根据查询内容进行切蛋糕,将相应的数据信息组成新的临时表(第三个临时表)。该临时表生成之后,第二个临时表被销毁。然后MySQL服务器就会将第三个临时表作为最后的查询结果推送给客户端供操作者查阅。

第三个临时表

ENAME

JOB

SAL

SMITH

CLERK

800

ADAMS

CLERK

1100

JAMES

CLERK

950

MILLER

CLERK

1300

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值