一个sql server的查询的问题

来源:百度知道 编辑:UC知道 时间:2024/09/26 10:48:15
select id, name as n from user oder by n
这样是可行的 但是为什么
select id, name as n from user where n = 'aaa'
服务器: 消息 207,级别 16,状态 3,行 1
列名 'n' 无效。

猜高手指点?
先谢谢 大家 但我问的是在 oder by 后 n 为什么有效?

这个涉及到sql查询语句的运行原理.
select id, name as n from user oder by n
因为order by 是在 查询出结果后 然后再对结果进行排序,而结果里面有n这个字段 相当于
select * from (select id, name as n from user) a order by n
这个只是好理解 ,其实不是这样写的.
而where则是条件的选择,我们假如表user有三个字段、id、name、pass
select id, name as n from user where pass = 'aaa'
我们这个语句也可以运行,而在查询的字段里面 pass没有出现,是因为 where 运行在字段显示的前面,其实 我们 查询 是通过 where 选择出符合条件的记录, 然后 内存里面记录出 该行记录所在硬盘上的物理位置,最后通过物理位置,把该行你需要的字段提取出来。反复运行,获取所有记录。这只是大概原理 .因为 你 order by n 的时候结果已经出来了.而order by 是对出现的结果进行排序的

select id, name as n from user where n = 'aaa'
你在这句后面加一句GROUP BY你想要查询的字段,应该就没问题了。

n又不是字段,肯定不行啊

n只是字段name的别名,不是表中真实存在的字段,所以不能用n来指定某个记录

where条件后给的必须是字段 或者其他有效条件
可以使子查询 可以是布尔值
比如:
select [name] from sysobjects where exists(select * from sysobjects )

意思是要sysobjects 表中有数据才显示所有的命子
这=是给的一个布尔值 也相当于是一个子查询

我认为这是,sql语句内部执行顺序的问题。
当Order by 执行是在select 语句执行以后,所以此时order by n在结果集中能够找到n.
另一个,在select 时