维过滤

阅读(1696) 标签: on, where,

功能介绍:

DQL支持在 ON后面写过滤条件,由于ON 的典型写法是维表名.字段名,所以ON后面的条件也就是对维表进行过滤,如果在多表连接中,多表的字段指向向一个维,则维后面的过滤条件,将会在所涉及的每一个表中进行过滤,所就是说,它能够让我们在多表关联时,相同的条件只写一次就可以了。

语法描述:

SELECTT.f(...),......, T.F..L',......, ONT'…C AS D WHERE,…

FROMT

BYT.F..L.....

参数说明:

WHERE    基于D写的过滤条件

举例:

1

SELECT 回款单.SUM(金额)

ON 年月 AS 年月WHERE ((年月)/100)>2011

FROM 回款单

BY 回款日期#年月

对“年月”维进行过滤,必须取别名,且ON不得省略

有别名时SELECT中用别名来选出分组维,写起来简单

2

SELECT

回款单.SUM(金额) 回款总额,

订单.SUM(订单金额)订单总额

ON 年月 AS 出生年月,年月 AS 月份

WHERE FLOOR((出生年月)/100)>1978

FROM 回款单

BY fk2.出生日期#年月,回款日期#年月

JOIN 订单

BY fk2.出生日期#年月,签单日期#年月

在出生年月后面我们对销售的出生年月进行过滤只取1978年之后出生的销售员工的数据,由于我们是针对维进行的过滤,而不是某一具体的表,所以它的作用相当于,对“回款单”表,“订单”表分别过滤1978年之后出生的员工的销售数据,然后再进行JOIN操作

3

SELECT

回款单.SUM(金额) 回款总额, 订单.SUM(订单金额)订单总额

ON 年月 AS 出生年月, 年月 AS 月份

FROM 回款单

WHERE fk2.出生日期#>1978

BY fk2.出生日期#年月, 回款日期#年月

JOIN 订单

WHERE fk2.出生日期#>1978

BY fk2.出生日期#年月,签单日期#年月

分别在每个表后写过滤条件,与上例的效果相同

知识点:

1) 可以在ON后面写过滤条件,对维进行过滤的条件会直接作用于与ON对齐的每个BY的字段中,如例2 ON后面的WHERE条件作用于BY后面的订单与回款单表中

2) ON后面有多个字段时,可以为每个字段写一个WHERE条件(注:需要写在所有ON字段之后),条件越多,关联的表越多,维过滤的收益就越大