我是SQL的新手,但是让我们说在StackExchange数据资源管理器上,我只想按声誉列出前15位用户,我写了这样的东西:
SELECT TOP 15
DisplayName, Id, Reputation, Reputation/1000 As RepInK
FROM
Users
WHERE
RepInK > 10
ORDER BY Reputation DESC
Run Code Online (Sandbox Code Playgroud)
目前这给出了一个Error: Invalid column name 'RepInK',我认为这是有道理的,因为RepInK它不是一个专栏Users.我可以通过说WHERE Reputation/1000 > 10,基本上重复公式来轻松解决这个问题.
所以问题是:
RepInK在WHERE条款中实际使用"列" 吗?
SELECT/WHERE查询?Reputation/1000,所以我只需要在几个地方重复这些名称而不是公式吗?
我真的可以在WHERE子句中使用RepInK"列"吗?
不,但您可以放心,您的数据库将评估(Reputation / 1000)一次,即使您在SELECT字段和WHERE子句中都使用它.
我是否需要使用此列创建虚拟表/视图,然后对其执行SELECT/WHERE查询?
是的,视图是简化复杂查询的一种选择.
我可以命名一个表达式,例如Reputation/1000,所以我只需要在几个地方重复这些名称而不是公式吗?
您可以创建一个用户定义的函数,您可以调用类似的函数convertToK,它将接收rep值作为参数并返回该参数除以1000.但是,对于像示例中的那种情况,这通常是不实际的.
是否有SQL快速表,术语表,语言规范,我可以使用什么来快速获取语言的语法和语义?
我建议练习.您可能想要开始关注Stack Overflow上的mysql标记,每天都会询问许多初学者问题.下载MySQL,当您认为存在一个问题时,请尝试寻找解决方案.我认为这将有助于您提高速度,以及对语言功能的认识.一开始没有必要发布答案,因为这里的主题有一些相当快的枪支,但通过一些练习我相信你能带回家一些点:)
我明白有不同的"味道"?
这些风格实际上是ANSI SQL的扩展.数据库供应商通常使用Transact-SQL和PL/SQL等扩展来扩充SQL语言.
您可以简单地重写WHERE子句
where reputation > 10000
Run Code Online (Sandbox Code Playgroud)
这并不总是方便的.作为替代方案,您可以使用内联视图:
SELECT
a.DisplayName, a.Id, a.Reputation, a.RepInK
FROM
(
SELECT TOP 15
DisplayName, Id, Reputation, Reputation/1000 As RepInK
FROM
Users
ORDER BY Reputation DESC
) a
WHERE
a.RepInK > 10
Run Code Online (Sandbox Code Playgroud)