功能介绍:
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字段之后),条件越多,关联的表越多,维过滤的收益就越大