asp的ado中使用SELECT-sql文法(四)

來源:互聯網
上載者:User

HAVING

HAVING使用於SELECT 運算式中,篩選已經GROUP BY統計的記錄。在GROUP BY統計記錄後,HAVING將篩選與HAVING子句中條件相吻合的記錄。

文法如下:

SELECT fieldlist
FROM table
WHERE selectcriteria
GROUP BY groupfieldlist
[HAVING groupcriteria]

.groupcriteria表示決定應篩選的統計記錄。

HAVING與WHERE相類似,是用來決定選取哪些記錄。當使用GROUP BY來統計記錄後,HAVING會決定應顯示的記錄,譬如:

SELECT 產品名稱

FROM 產品

GROUP BY 分類

HAVING 單價 > 1000

一個HAVING子句最多可包含40個運算式,運算式之間將由AND或OR等邏輯運運算元來連結。

讓我們看一個於ASP程式當中使用這個SQL指令的例子。

我們可以利用HAVING子句決定應顯示的記錄,譬如ASP程式rs23.asp如下,[SELECT 姓名,科目,Avg(分數) As 平均 From 考試 Group By 姓名,科目 Having Avg(分數) >=60],使用Having Avg(分數) >=60找出平均分數大於或等於60分的記錄:

<%

Set conn1 = Server.CreateObject("ADODB.Connection")

conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"

Set rs2 = Server.CreateObject("ADODB.Recordset")

SqlStr = "SELECT 姓名,科目,Avg(分數) As 平均 From 考試 Group By 姓名,科目 Having Avg(分數) >=60"

rs2.Open SqlStr,conn1,1,1

Response.Write "<p>Having Avg(分數) >=60"

Do while not rs2.EOF

Response.Write "<BR>" & rs2("姓名") & " " & rs2("科目") & " 平均: " & rs2("平均")

rs2.MoveNext

Loop

rs2.Close

%>

以上的 ASP程式rs23.asp,在使用者端使用瀏覽器,瀏覽執行的結果,顯示找出平均分數大於或等於60分的記錄。

我們也可以利用HAVING子句找出重複的記錄,譬如ASP程式rs23.asp如下,[SELECT 代號 From 產品 Group By 代號 Having Count(代號) > 1],使用Having Count(代號) > 1找出代號重複的記錄:

<%

Set conn1 = Server.CreateObject("ADODB.Connection")

conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"

Set rs2 = Server.CreateObject("ADODB.Recordset")

SqlStr = "SELECT 代號 From 產品 Group By 代號 Having Count(代號) > 1"

rs2.Open SqlStr,conn1,1,1

Response.Write "<p>找出重複Having Count(代號) > 1"

Do while not rs2.EOF

Response.Write "<BR>" & rs2("代號")

rs2.MoveNext

Loop

rs2.Close

%>

以上的 ASP程式rs23.asp,在使用者端使用瀏覽器,瀏覽執行的結果,顯示代號重複的記錄。

Union

Union可以合并多組查詢的結果。

文法如下:

查詢1 UNION [ALL] 查詢2 [UNION [ALL]查詢3 [ ... ]]

查詢為一個SELECT運算式。

當您使用一個 UNION 運算時,不會返回重複的記錄;若要返回所有的記錄,您可以於UNION後加上ALL,加上ALL執行查詢的速度比較快。

在一個UNION運算中的所有查詢,欄位數目必須相同。欄位大小可以不同,欄位資料類型也可以不同。

只有在第一個SELECT運算式中可使用別名,在其它SELECT運算式中被省略。

可以在每一個SELECT運算式中使用GROUP BY或HAVING子句,以統計查詢的結果。

可以在最後一個SELECT運算式使用ORDER BY 子句,以指定查詢的結果的排列順序。

讓我們看一個於ASP程式當中使用這個SQL指令的例子。

可以利用Union合并兩組查詢的結果,譬如ASP程式rs25.asp如下,[(SELECT 姓名,科目,分數 From 考試 Where 科目='算術' and 姓名='李四') Union (SELECT 姓名,科目,分數 From 考試 Where 科目='算術' and 姓名='張三')],使用Union合并兩組SELECT查詢的結果,一組為查詢李四的算術成績記錄,另一組查詢張三的算術成績記錄:

<%

Set conn1 = Server.CreateObject("ADODB.Connection")

conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"

Set rs2 = Server.CreateObject("ADODB.Recordset")

SqlStr = "(SELECT 姓名,科目,分數 From 考試 Where 科目='算術' and 姓名='李四') Union (SELECT 姓名,科目,分數 From 考試 Where 科目='算術' and 姓名='張三')"

rs2.Open SqlStr,conn1,1,1

Response.Write "<p>Union"

Do while not rs2.EOF

Response.Write "<BR>" & rs2("姓名") & " " & rs2("科目") & " 分數: " & rs2("分數")

rs2.MoveNext

Loop

rs2.Close

%>

以上的 ASP程式rs25.asp,在使用者端使用瀏覽器,瀏覽執行的結果,顯示李四和張三的算術分數記錄。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.