`
snowstone
  • 浏览: 19823 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

ORACLE 在WHERE子句中引用列别名的问题(转)

阅读更多
SQL> select sal,comm from emp   
  2  where sal<2000;   
  
       SAL       COMM   
---------- ----------   
       800   
      1600        300   
      1250        500   
      1250       1400   
      1500          0   
      1100   
       950   
      1300   
  
8 rows selected.   
  
SQL> select sal as salary,comm as commission from emp   
  2  where salary<2000;   
where salary<2000   
      *   
ERROR at line 2:   
ORA-00904: "SALARY": invalid identifier   
  
  
SQL> select * from   
  2  (   
  3  select sal as salary,comm as commission from emp   
  4  ) x   
  5  where salary<2000;   
  
    SALARY COMMISSION   
---------- ----------   
       800   
      1600        300   
      1250        500   
      1250       1400   
      1500          0   
      1100   
       950   
      1300   
  
8 rows selected.  

    将取别名的查询作为内联视图,便可以在外部查询中引用其中的别名列。为什么要这么做呢?WHERE子句是在SELECT之前进行处理的,这样,在处理求解“问题”查询的WHERE子句之前,SALARY和COMMISSION并不存在,要到WHERE子句处理完成之后,别名才生效。然而,FROM子句是在WHERE之前处理的。将原查询放在FROM子句中,那么,在最外层的WHERE子句之前,以及最外层的WHERE子句“看到”别名之前,就已经生成了查询结果。
分享到:
评论

相关推荐

    Oracle行转列之pivot

    在Oracle数据库中,行转列(也称为数据透视)和列转行(unpivot)是SQL查询中用于数据转换的高级功能。从Oracle 11g版本开始,引入了PIVOT和UNPIVOT关键字,以支持显式的查询转换,即从行数据转换为列数据,或从列...

    Oracle 11GR2的递归WITH子查询方法

    Oracle 11GR2的递归WITH子查询是一种强大的功能,它允许你在SQL查询中创建递归关系,处理层级数据,比如组织结构、家族树或依赖关系等。WITH子查询,也称为公共表表达式(CTE),是SQL标准的一部分,自9i版本开始被...

    Oracle性能问题总结

    在索引相关方面,需要对经常查询的字段建立索引,使用 bitmap 索引,对于多个列的索引,需要在第一个列被 where 子句引用时,优化器才会选择使用该索引。 在 SQL 相关方面,需要注意 Oracle 的 From 子句表的顺序,...

    22.Oracle的别名1

    - 列的别名仅适用于查询结果集,不能直接在 `WHERE` 子句中使用。例如,`SELECT id 编号, name 姓名 FROM T_GIRL WHERE 编号='0101'` 会报错,因为 `WHERE` 子句中必须使用原始列名 `id`。 - 列的别名可以用于 `...

    从Sql Server迁移到 Oracle 过程中代码需要调整的地方

    - SQL Server中的跨表更新可以使用JOIN,而在Oracle中,通常需要将子查询放在`WHERE`子句中,如`WHERE product_id IN (SELECT ...)`。 6. **操作符**: - 字符串连接符:SQL Server使用`+`,Oracle使用`||`。 7...

    Oracle高级SQL培训与讲解

    - 如果WITH子句的结果集列具有别名,在后续的查询中必须使用该别名或者使用通配符(*)来引用这些列。 5. **WITH子句对执行计划的影响** - WITH子句可能会改变查询的执行计划,因为它可能影响到查询优化器的选择...

    071-最新.pdf

    题库中列出了五个关于WHERE和HAVING子句的陈述,其中有三个是正确的。正确的陈述包括: A. WHERE和HAVING子句不能在同一个SQL语句中同时使用,这是错误的。实际上,WHERE子句可以与HAVING子句共同使用。 B. HAVING...

    OracleSql脚本书写规范

    如果可以在FROM和WHERE子句中完成过滤,就不要在GROUP BY后的HAVING子句中进行,因为HAVING是在聚合后进行的,相对消耗更多资源。 **7. 减少对表的查询** 通过JOIN操作和子查询,尽量减少对相同表的重复查询,减少...

    oracle sql调优原则

    - **使用表别名**:在连接多个表时使用表别名,并在每个列前加上别名前缀。这样可以减少解析时间,并减少由列名歧义引起的语法错误。 - **限制使用`SELECT * FROM table`**:Oracle在解析`*`时会将其转换为所有列名...

    oracle数据库优化

    3. **避免在 SELECT 子句中使用通配符'*'**:使用通配符会增加解析时间,应明确列出所需列,以减少数据库的工作量。 4. **减少数据库访问次数**:尽量一次性获取更多数据,可以通过调整 ARRAYSIZE 参数来实现,例如...

    ocp_071 oracle ocp

    2. **WHERE和HAVING子句**:WHERE子句用于对单个查询返回的行进行过滤,它在数据分组之前执行,而HAVING子句则是在数据分组之后对分组的结果进行过滤。HAVING子句支持聚合函数,而WHERE子句则不支持。此外,HAVING...

    Oracle SQL编写规范

    在编写SQL语句时,可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。这可以减少数据库的扫描次数从而提高执行效率。 6. SELECT子句中避免使用‘*’ 在编写SQL语句时,SELECT子句中避免使用‘*’,因为这样...

    ORACLE高效SQL书写规范

    在多表联接查询中,使用表别名可以使SQL语句更加清晰易读,同时也能减少ORACLE对SQL语句的解析时间。通过在字段名称前加上表别名,可以清楚地表明该字段所属的表。 **示例** 错误做法: ``` SELECT ename, dname ...

    ORACLE

    1. **表的处理顺序**:在 FROM 子句中,Oracle 从右到左处理表,基础表(记录条数最少的表)先被处理。在多表连接中,选择交叉表(被其他表引用的表)作为基础表,可以提高查询效率。 2. **WHERE 子句的解析顺序**...

    oracle+plsql性能优化

    例如,在where子句中避免使用isnull或isnotnull,因为这会阻止索引的使用。另外,对于联接列,即使联接值为静态值,优化器同样可能不会使用索引,这要求开发者在编写查询时需要考虑到优化器的工作方式。 2. SQL语句...

    Oracle数据库SQL优化总结

    2. **WHERE子句中的连接顺序**:从下往上解析WHERE子句,将能够过滤最多记录的条件放在最后,这样可以减少处理的数据量。 3. **避免在SELECT中使用通配符'*'**:使用具体的列名代替'*',以减少解析时间和内存消耗。...

    Oracle Database 10g SQL开发指南 中文目录

    日期和时间处理部分详细讲解了Oracle中日期和时间值的存储和处理,包括日期格式转换、时间值函数的使用,以及如何处理时区问题,确保在跨时区操作中数据的一致性。 总之,《Oracle Database 10g SQL开发指南》是一...

    甲骨文数据库oracle个人学习(sql部分).docx

    WHERE 子句是 SQL 语句中最重要的部分。本笔记介绍了 WHERE 子句的基本语法,包括字符串和日期的比较、 BETWEEN 语句、IN 语句、LIKE 语句、IS NULL 语句等。WHERE 子句可以用来过滤数据,选择满足条件的行。字符串...

    PLSql循序渐进全面学习教程--Oracle

    从Oracle 7.0.16版本开始,可以直接在`ORDER BY`子句中使用列别名。还可以通过列的位置进行排序,这样就不需要重复复杂的表达式。 除了基本的查询和排序,还可以通过`WHERE`子句添加条件来限制选取的行。例如,可以...

Global site tag (gtag.js) - Google Analytics