我們先來看一看動網的代碼:
"select top 200 * from topic where topicid in (select top 200 rootid from "&NowUseBBS&" where postuserid="&userid&" order by announceid desc) order by topicid desc"
這個查詢中為什么有小括號呢?是什么意思?且聽在下繼續分解。
我們一般用到的查詢都是單層查詢,而上面這段查詢卻是兩層,它要求服務器在處理最終查詢工作之前先生成一個結果,然后根據當前的查詢結查再進一步繼續下面的查詢工作,也就是說,先執行小括號內的查詢(我們稱之為子查詢),然后服務器才開始執行外面的查詢,返回正確的結果,這種查詢稱為嵌套查詢。上面的這個查詢,第一層查詢是查登錄用戶在本版發布過的所有貼子(含回復),然后再查這些貼子的主題。
除了上面這個功用之外,嵌套查詢還有什么好處呢?如果要求在搜索的匹配條件中使用統計函數(這在分析統計數據中經常用到),可以使用嵌套查詢。比如說,現在要求查詢所有銷售量大于平均銷售量的書的代號,如果寫成下面的查詢方式:
SELECT title_id,qty //title_id為書號,qty為銷售量
From sales
Where qty>avg(qty) //avg為平均數函數,avg(qty)即為平均銷售量
服務器將會提示錯誤,因為,在where子句中不許直接對本SELECT列表的數據使用統計函數。通過在where子句中使用嵌套查詢可以解決這個問題,語法如下:
SELECT title_id,qty
FROM sales
WHERE qty>
(SELECT avg(qty) FROM sales)
文章來源于領測軟件測試網 http://www.kjueaiud.com/