SQL 语句的解析过程

、FROM子句

 

FROM子句标识了需要查询的表,如果指定了表操作,会从左到右的处理,每一个基于一个或者两个表的表操作都会返回一个输出表。左边表的输出结果会作为下一个表操作的输入结果。例如,交表相关的操作有 (1-J1)笛卡尔积,(1-J2)ON过滤器,(1-J3)添加外部列。FROM句子生成虚拟表VT1。

 

1执行笛卡尔积(CROSS JOIN)

 

笛卡尔积会把左右两个表每一行所有可能的组合都列出来生成表VT1-J1,如果左表有m列,右表有n列,那么笛卡尔积之后生成的VT1-J1表将会有m×n列。

 

Step 1-J1这个步骤等价于执行:

 

SELECT * from Customers C  CROSS JOIN Orders O

 

执行结果为:(共有4×7列)

 

C.customerid

C.city

O.orderid

O.customerid

FISSA

Madrid

1

FRNDO

FISSA

Madrid

2

FRNDO

FISSA

Madrid

3

KRLOS

FISSA

Madrid

4

KRLOS

FISSA

Madrid

5

KRLOS

FISSA

Madrid

6

MRPHS

FISSA

Madrid

7

NULL

FRNDO

Madrid

1

FRNDO

FRNDO

Madrid

2

FRNDO

FRNDO

Madrid

3

KRLOS

FRNDO

Madrid

4

KRLOS

FRNDO

Madrid

5

KRLOS

FRNDO

Madrid

6

MRPHS

FRNDO

Madrid

7

NULL

KRLOS

Madrid

1

FRNDO

KRLOS

Madrid

2

FRNDO

KRLOS

Madrid

3

KRLOS

KRLOS

Madrid

4

KRLOS

KRLOS

Madrid

5

KRLOS

KRLOS

Madrid

6

MRPHS

KRLOS

Madrid

7

NULL

MRPHS

Zion

1

FRNDO

MRPHS

Zion

2

FRNDO

MRPHS

Zion

3

KRLOS

MRPHS

Zion

4

KRLOS

MRPHS

Zion

5

KRLOS

MRPHS

Zion

6

MRPHS

MRPHS

Zion

7

NULL

 

2应用ON过滤,(JOIN 条件)

 

ON过滤条件是sql的三个过滤条件(ON,WHERE,HAVING)中最先执行的,ON过滤条件应用于前一步生成的虚拟表(VT1-J1),满足ON过滤条件的行会被加入到虚拟表VT1-J2中。在应用了ON 过滤之后,生成的VT1-J2表如下所示:

 

C.customerid

C.city

O.orderid

O.customerid

FRNDO

Madrid

1

FRNDO

FRNDO

Madrid

2

FRNDO

KRLOS

Madrid

3

KRLOS

KRLOS

Madrid

4

KRLOS

KRLOS

Madrid

5

KRLOS

MRPHS

Zion

6

MRPHS

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源,欢迎大家关注尚硅谷公众号(atguigu)了解更多。

 

 


上一篇:
下一篇:
关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
全国统一咨询电话:010-56253825
地址:北京市昌平区宏福科技园2号楼3层(北京校区)

深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)

武汉市东湖高新开发区东湖网谷(武汉校区)