当前位置: 首页 > 图文教程 > 网络编程 > ASP > 在ADO使用SELECT语法四

ASP
[原创]asp下用实现模板加载的的几种方法总结
asp下利用fso实现文件夹或文件移动改名等操作函数
asp cint clng的范围与防止cint和clng的溢出解决方法大全
asp防范跨站点脚本攻击的的方法
独孤剑写的马克斯迅雷片库采集插件1.4 官方最新版提供下载了
根据日期得到生肖的ASP函数
不错的主要用于加密的vbs(asp)位移运算类
Script.VBS.Agent.ai juan.vbs专杀
循环取值Request.QueryString的用法
asp下实现字符串的补充fill()
无服务器做任意二级米子站
几种另类的ASP后门
asp事物功能简单小应用
ASP获取网页全部图片地址并保存为数组的正则
通过客户端验证上传图片文件大小的ASP源码
asp下计算分页的几种方法
谈动态多行多列,循环行和列,输出M行N列的ASP代码
asp在线执行sql语句的函数
asp正则html的图片,对图自动缩放大小
文件名 正则表达式提取方法

ASP 中的 在ADO使用SELECT语法四


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 146 ::
收藏到网摘: n/a

  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=&qu