【SQL系列】在WHERE子句中使用别名来引用列

简介: 【SQL系列】在WHERE子句中使用别名来引用列

问题

在结果集中,你已经使用别名更改列名,但还想使用 WHERE 子句将某些行排除在外。为此,你在 WHERE 子句中引用了别名,但以失败告终。

select  job, salary as sal

from emp

where sal<=3000;

解决方案

将查询作为内嵌视图来引用列的别名。

select job, sal

from (select job, salary as sal

     from emp) a

where sal <= 3000;

扩展

在这个简单的实例中,可以在 WHERE 子句中直接引用  salary,这样就无须使用内嵌视图了。

select job, salary as sal

     from emp

where salary <= 3000;

上述解决方案演示了在 WHERE 子句中引用如下内容时,需要做什么。

  • 聚合函数
  • 标量子查询
  • 窗口函数
  • 别名

补充

将提供别名的查询放在内嵌视图中,就可以在外部查询中引用列的别名。为什么要这样做呢?

这是由于 WHERE 子句是在 SELECT 子句之前评估的,

因此,对于前面说明问题时列举的查询,在评估其中的 WHERE 子句时,还没有别名 SAL。

这些别名在 WHERE 子句处理完毕后才存在。然而,FROM 子句是在 WHERE 子句之前评估的。

如果将查询放在 FROM 子句中,那么将在最外层的 WHERE 子句执行前生成该查询的结果,这样一来,最外层的 WHERE 子句就能够“看到”别名了。在列名不是太好时,这种技巧很有用。


点个赞吧,这对我非常重要!

目录
相关文章
|
5月前
|
SQL 数据库
SQL 查询优化指南:SELECT、SELECT DISTINCT、WHERE 和 ORDER BY
SQL的SELECT语句用于从数据库中选择数据。SELECT语句的基本语法如下:
58 1
|
4月前
|
SQL 流计算
在Flink SQL中,如果在使用表别名后,WHERE子句中使用了别名,可能会出现找不到表的问题
【1月更文挑战第4天】【1月更文挑战第18篇】在Flink SQL中,如果在使用表别名后,WHERE子句中使用了别名,可能会出现找不到表的问题
32 1
|
5月前
|
SQL 数据库
SQL HAVING 子句详解:在 GROUP BY 中更灵活的条件筛选
HAVING子句被添加到SQL中,因为WHERE关键字不能与聚合函数一起使用。
72 0
|
5月前
|
SQL 数据库
SQL JOIN 子句:合并多个表中相关行的完整指南
SQL LEFT JOIN关键字返回左表(table1)中的所有记录以及右表(table2)中的匹配记录。如果没有匹配,则右侧的结果为0条记录。
64 0
|
5月前
|
SQL 数据库
SQL标识列实现自动编号的步骤和技巧以及优势
SQL标识列实现自动编号的步骤和技巧以及优势
69 0
|
6月前
|
SQL Java 数据库连接
Mybatis引用sql片段
Mybatis引用sql片段
|
6月前
|
SQL 机器学习/深度学习
SQL语句like子句中的转义符
SQL语句like子句中的转义符
|
6月前
|
SQL 关系型数据库 MySQL
sql处理重复的列,更好理清分组和分区
sql处理重复的列,更好理清分组和分区
47 0
|
7月前
|
SQL
一条集多表查询、字段与字段拼接、合并每张表共同字段、新增列并赋值的SQL
一条集多表查询、字段与字段拼接、合并每张表共同字段、新增列并赋值的SQL
26 0
|
7月前
|
SQL
29MyBatis - 动态SQL的 where标签
29MyBatis - 动态SQL的 where标签
30 0