在WHERE子句中引用取別名的列

2021-09-30 06:59:04 字數 868 閱讀 3201

問題

前面已經使用了別名為查詢提供更有意義的列名,而且也使用where子句將一些資料排除掉,然而,我們還想在where子句中引用別名。

select sal as salary, comm as commission

from emp

where salary < 5000

解決方案

將查詢作為內聯檢視就可以就可以引用其中別名的列了:

select 

*from

(

select sal as salary, comm as commission

from emp ) x

where salary < 5000

討論

在這個簡單的示例中,可以不使用內聯檢視,也不用在where子句中直接引用comm或sal而得到相同的結果。本方案介紹的方法在下列情形的where子句都可以使用:

將取別名的查詢作為內聯檢視,便可以在外部查詢中引用其別名列,為什麼要這麼做呢?where子句是在select子句之前進行處理的,在處理求解查詢「問題」where子句之前,salary和commission並不存在,要到where子句處理完成之後,別名才有效。然而,from子句是在where子句之前進行處理的。將原始查詢放在from之句之中,那麼,在最外層的where子句之前,以及最外層的where子句「看到」別名之前,就已經生成了查詢結果。如果表中的列沒有特別命名的話這是乙個非常有用的技巧。

(pocketz's blog

) 出處:

where子句中的and和or的影響

and 和 or 的執行條件 select from emp where deptno 10 or comm is not null or sal 2000 and deptno 20 在這個例項中where子句找到了如下的資料 or將前後的關係並列,有or的出現,使where子句進行分段。效果相當...

盡量避免在SQL語句的WHERE子句中使用函式

start 在sql語句的where子句中應該盡量避免在字段上使用函式,因為這樣做會使該字段上的索引失效,影響sql語句的效能。即使該字段上沒有索引,也應該避免在字段上使用函式。考慮下面的情況 現在要求你把2009.9.24註冊的使用者都查出來,怎麼辦?可能有人會這麼寫 不過很遺憾,這個語句是錯誤的...

關於where子句中的子查詢語法說明

首先說一句,大神就不用看了。先看乙個sql語句 select distinct name from user u1 where select count from user u2 where u1.name u2.name 3 這句話是選出user表中name欄位相同的名字出現三次以上的name。這...