转自:
http://www.cnblogs.com/dwfbenben/archive/2013/09/07/3307941.html
当select的表达式很长时,我们经常会用as子句为该表达式指定别名,然而却发现无法在Where条件中直接使用该别名作为判断条件.
例如下面的SQL语句:
select id, (c1 + c2) as s from t1 where s > 100
运行会报错: “列名 s 无效”
当然,写成
select id, (c1 + c2) as s from t1 where (c1 + c2) > 100
就可以。
SQL语句中,为什么where子句不能使用列别名,而order by却可以?
在ORACLE中,select 语句的执行顺序是:
1. from语句
2. where语句(结合条件)
3. start with语句
4. connect by语句
5. where语句
6. group by语句
7. having语句
8. model语句
9. select语句
10. union、minus、intersect等集合演算演算
11. order by语句
在SQLServer中,select语句的执行顺序是:
(1)FROM JOIN ON
(2)WHERE
(3)GROUP BY
(4)HAVING
(5)SELECT DISTINCT TOP()
(6)ORDER BY
由select语句的执行顺序,我们可以发现在where子句执行的时候,取别名的语句还没执行,即该别名不存在,自然就不能使用了,而order by的时候别名就已经命名好了。
我们还可以知道:如果在from子句中指定了表别名,那么它所在的select 语句中其他子句都必须使用表别名来代替原始的表名,因为from子句是select语句中最先被执行的。
转自:http://www.cnblogs.com/dwfbenben/archive/2013/09/07/3307941.html当我们使用某个表达式作为输出的一列时,我们无法在Where条件中直接使用该列作判断条件. 例如下面的SQL语句: select id, (c1 + c2) as s from t1 where s > 100 运行会报错: “列名 s 无效”
函数调用运算符必须是成员函数。一个类可以定义多个不同版本的调用运算符,相互之间应该在参数数量或类型上有所区别。
如果类定义了调用运算符,则该类的对象称为函数对象。
含有状态的函数对象类
函数对象除了operator()之外也可以包含其他成员。函数对象类通常含有一些数据成员,这些成员被用于定制调用运算符
中
的操作。
定义一个打印string实参内容的类。默认情况下,我们的类会将内容写入...
my
sql
中
where后为什么
不能
使用
select
中
定义的
别名
:
因为my
sql
中
sql语句
的书写顺序与执行顺序不同
sql
书写顺序:
select
查询内容 from 表 where 查询条件
sql
执行顺序: from 表 where 查询条件
select
查询内容
select
camp.group_id as group_id --实验分组
,int((datediff(arrive.arrive_dt,'2018-06-20')-1)/7)+1 as ob_week --观察周
,count(distinct camp.driver_id) as group_cnt --组人数
在KingbaseESv8
中
,在包含group by
子句
的
SQL
中
,出现在
select
子句
中
列
,除了用于分组函数
中
,还能用于哪些位置? A. where
子句
B. group by
子句
C. having
子句
D.
order
by
子句