在ADO使用SELECT语法四
程序员文章站
2022-09-04 17:20:09
having
having使用于select 表达式中,筛选已经group by统计的记录。在group by统计记录后,having将筛选与hav...
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,在用户端使用浏览器,浏览执行的结果,显示李四和张三的算术分数记录。
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,在用户端使用浏览器,浏览执行的结果,显示李四和张三的算术分数记录。
上一篇: 设计模式系列 - 观察者模式
下一篇: 封装一个简易版的ajax操作对象
推荐阅读
-
在 ADO.NET中使用存储过程
-
只要掌握四点技能就可以在简历上写熟练使用word
-
SQL基础语法的单表操作 select|insert|update|delete(增删改查) 简单使用
-
正则表达式语法规则及在Javascript和C#中的使用方法
-
T-SQL基本语句使用,select语法、insert语法、update语法、delete语法
-
解决select2在bootstrap modal中不能正常使用的问题
-
在ADO使用SELECT语法四
-
在没有字段名的情况下,在 aspx 中使用绑定语法的方法
-
记录一次在node中愉快的使用ES6的语法
-
其实你已经在使用Lisp语法了 lispunix