今天在 MS SQL Server 2000 Enterprise Manager 的 SQL 窗格中调试如下 SQL 语句:
SELECT TOP 10 *
FROM (SELECT TOP 20 *
FROM news
WHERE class = 001
ORDER BY pubdate DESC)
ORDER BY pubdate
发现 SQL 窗格执行后在将原始的 SQL 改动了,自动增加了一个 DERIVEDTBL ,变成如下这样了:
SELECT TOP 10 *
FROM (SELECT TOP 20 *
FROM news
WHERE class = 001
ORDER BY pubdate DESC) DERIVEDTBL
ORDER BY pubdate
这个 DERIVEDTBL 还真让我费了一点劲,以为是新的保留关键字,可是在 SQL Server 的 Online Help 中没有找到,在 Google 也没找着这个单词的解释。
后来无意中把 DERIVEDTBL 改成 Temp 发现也能用,汗~~~,原来是 SQL 窗格只是给子查询增加了一个别名而已。
唉,真是吃了没文化的亏了,谁让咱 SQL Server 学/用得少呢。
建议把这个作为招聘 SQL Server 相关人员的一个面试题。
被你的问题搞糊涂不,只看SQL才明白你要说什么!
呵呵,在From里子句里的AS是可以省略掉的。
select *
from a as temp
和
select *
from a temp
是一个意思,呵呵
呵呵,以前也不太明白,,,
作了三个月DBA才知道的。。。:-(
楼主钻研的精神令人佩服啊。。。
你只是一时糊涂!
If u search derived tables in SQL online book, u will see it. It is just alias name.
只能说你对sql了解太少了。
在db2 7.2里面,如果子查询不加别名的话就会出错。
ms sql里面只是自动给你加上了。
也只会在 SQL Server 的 Enterprise Manager 的 SQL 窗格中才会这样,如果是在 Query Analyser 中,你如果不加别名,会被认为是不合法的查询语句。看来你平时不怎么用 MS SQL Server 吧?
搞笑
这有什么奇怪的
有点意思
跟SqlServer没关
今天我碰到一样的问题
和你写了一样的SQL,为了实现SQL分页
不知这样来回倒序会不会影响效率,和用主键查哪个效率更高
刚才没说清楚,如果记录非常多的话,这两种方法哪个消耗的资源会更少呢
SELECT TOP 10 *
FROM news
WHERE (PK IN
(SELECT TOP 20 PK
FROM news
where class = 001
ORDER BY pubdate DESC))
ORDER BY pubdate
这个会不会特别大SELECT TOP 20 * FROM news WHERE class = 001 ORDER BY pubdate DESC
SELECT TOP 10 *
FROM (SELECT TOP 20 *
FROM news
WHERE class = 001
ORDER BY pubdate DESC)
ORDER BY pubdate
说得不错,我在用SQL的嵌套查询语句,每次自动加个DERIVEDTBL,却不懂什么意思,GOOGLE上找了找,就找到这里来了。现在是明白了,我是小菜鸟
我也是
我也是阿 XD
我也是菜鸟:)
诶…
关于中间的哪个耗资源小一些,应该做个测试试验一下。
我个人觉得应该是order再order的小,用in可能更慢一点。
我也是从GOOGLE上转过来,看出点门道了,谢谢LZ
汗!!!
用了两年了,今天才知道,不过是知道以后才看到这个帖子的。早看到就好了
謝謝樓主的貼…我也是菜鳥:)