当前位置: 移动技术网 > IT编程>开发语言>.net > 在ADO使用SELECT语法四

在ADO使用SELECT语法四

2019年01月06日  | 移动技术网IT编程  | 我要评论

msdn 中文,彼岸花开之夜,h中文漫画

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.如下,[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,在用户端使用浏览器,浏览执行的结果,显示李四和张三的算术分数记录。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网