上一篇:用ASP列出服务器上的所有硬盘及类型 >>
在ADO使用SELECT语法六
在一个SELECT、SELECT...INTO、INSERT...INTO、DELETE、或UPDATE 表达式中,可以包括SELECT表达式,这个SELECT表达式叫做子查询(sub query)。
您可以使用三种语法建立子查询:
表达式 [ANY | ALL | SOME] (子查询)
表达式 [NOT] IN (子查询)
[NOT] EXISTS (子查询)
子查询的一个SELECT表达式,与一般SELECT表达式的语法相同,必须包括在括号之中。
您可以使用子查询来替代SELECT表达式的运算式,或在WHERE或 HAVING子句中的运算式。
关键字ANY和SOME的意义相同,用来选择符合子查询的任何记录的比较条件。譬如下例将返回产品中单价大于订单中任何数量大于100的记录:
SELECT * FROM 产品
WHERE 单价 > ANY
(SELECT 单价 FROM 订单
WHERE 数量 > 100)
关键字ALL,用来选择符合子查询的所有记录的比较条件。
譬如在上例中将ANY改为ALL,将返回产品中单价大于订单中所有数量大于100的记录。
关键字IN 述语来撷取在主查询中且只有在子查询之中包含相同值的某些记录。下列范例会返回以百分之 25 或更高的折扣卖出的所有产品:
关键字IN,用来选择在子查询之中的记录。譬如下例将返回订单中数量 > 100的记录:
SELECT * FROM 产品
WHERE 产品代号 IN
(SELECT 产品代号 FROM 订单
WHERE 数量 > 100)
相反地,关键字NOT IN,用来选择不在子查询之中的记录。
在true/false比较中,可以使用EXISTS关键字,来决定子查询是否会返回任何的记录。
关键字ALL的ASP例子,譬如ASP程式rs24.asp如下,[SELECT 姓名,科目,分数 From 考试 Where 科目 = @#算术@# and 分数 >= All (SELECT 分数 From 考试 Where 科目=@#算术@# and 姓名=@#张三@#)] 找出分数大于或等于张三的算术考试的算术记录:
<%
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 分数 >= All (SELECT 分数 From 考试 Where 科目=@#算术@# and 姓名=@#张三@#)"
rs2.Open SqlStr,conn1,1,1
Response.Write "<p>All高于张三算术所有分数"
Do while not rs2.EOF
Response.Write "<BR>" & rs2("姓名") & " " & rs2("科目") & " 分数: " & rs2("分数")
rs2.MoveNext
Loop
rs2.Close
%>
以上的 ASP程式rs24.asp,在用户端使用浏览器,浏览执行的结果,显示分数大于或等于张三的算术考试的算术记录。
Any
关键字ANY用来选择符合子查询的任何记录的比较条件,譬如ASP程式rs24.asp如下,[SELECT 姓名,科目,分数 From 考试 Where 科目 = @#算术@# and 分数 >= Any (SELECT 分数 From 考试 Where 科目=@#算术@# and 姓名=@#张三@#)] 找出分数大于或等于张三任何算术分数的记录:
<%
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 分数 >= Any (SELECT 分数 From 考试 Where 科目=@#算术@# and 姓名=@#张三@#)"
rs2.Open SqlStr,conn1,1,1
Response.Write "<p>Any高于张三算术任何分数"
Do while not rs2.EOF
Response.Write "<BR>" & rs2("姓名") & " " & rs2("科目") & " 分数: " & rs2("分数")
rs2.MoveNext
Loop
rs2.Close %>
以上的 ASP程式rs24.asp,在用户端使用浏览器,浏览执行的结果,显示分数大于或等于张三任何算术分数的记录。
Some
关键字SOME和ANY的意义相同,用来选择符合子查询的任何记录的比较条件,譬如ASP程式rs24.asp如下,[SELECT 姓名,科目,分数 From 考试 Where 科目 = @#算术@# and 分数 >= Some (SELECT 分数 From 考试 Where 科目=@#算术@# and 姓名=@#张三@#)] 找出分数大于或等于张三任何算术分数的记录:
<%
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 分数 >= Some (SELECT 分数 From 考试 Where 科目=@#算术@# and 姓名=@#张三@#)"
rs2.Open SqlStr,conn1,1,1
Response.Write "<p>Some高于张三算术任何分数"
Do while not rs2.EOF
Response.Write "<BR>" & rs2("姓名") & " " & rs2("科目") & " 分数: " & rs2("分数")
rs2.MoveNext
Loop
rs2.Close
%>
以上的 ASP程式rs24.asp,在用户端使用浏览器,浏览执行的结果,显示分数大于或等于张三任何算术分数的记录。
Select...Into
Select...Into将查询的结果,建立一个产生的表。
语法如下:
SELECT 字段1[,字段2[, ...]] INTO 新表 [IN 外部表]
FROM 表
新表的名称不可与现存表的名称相同,否则将会发生错误。
Select...Into所建立的新表,其字段的资料类型及大小与所查询的表相同。
让我们看一个于ASP程式当中使用这个SQL指令的例子。
譬如ASP程式rs9.asp如下,[Select * Into 电脑 From 产品 Where 种类 = @#电脑@#] 将 [产品] 表中所有 [种类] 为 [电脑] 的纪录产生一个新的 [电脑] 表:
<%
Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
sql = "Select * Into 电脑 From 产品 Where 种类 = @#电脑@#"
Set a = conn1.Execute(sql)
Set rs3 = Server.CreateObject("ADODB.Recordset")
sql = "Select * from 电脑"
rs3.Open sql,conn1,1,1,1
%>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">代号</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">名称</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">价格</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">数量</FONT></TD>
</TR>
<% Do while not rs3.EOF %>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("代号")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("名称")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("价格")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("数量")%></TD>
</TR>
<%
rs3.MoveNext
Loop
rs3.Close
%>
</TABLE>
以上的 ASP程式rs9.asp,在用户端使用浏览器,浏览执行的结果,显示新 [电脑] 表的记录。
(全文完)出处:http://asp123.on.net.cn
下一篇:在asp聊天室里实现房间功能和用户显示 >>
相关文章:
- · Asp降龙十九掌
- · 在ADO使用SELECT语法三
- · ADO使用SELECT语法二
- · 在ADO使用SELECT语法一
- · 如何解决图形和文字的显示问题
- · 数组数据排序的程序例子
- · ADO存取数据库如何与HTML结合
- · 用纯ASP代码实现图片上传并存入数据库中
- · 讨论 SELECT TOP N 问题
- · 在Asp中使用存储过程
- · 不用DNS连接数据库方法的几个参数
- · ASP的几大可扩展组件(二)
- · 用几行Asp代码实现防止表单多次被提交
- · ASP中使用Office2000中的图表控件
- · 关于ASP程序中日期型数据的格式问题探讨
- · 解决在执行数据库查询中的特殊字符的问题
- · asp分页显示详论
- · ASP编写数据库维护程序
- · Session对象在各浏览器中的有效范围
- · ASP访问Exchange Server问题
- · 用FrontPage98 开 发ASP
- · Global.asa 参考(五) - TypeLibrary 声明
- · Global.asa 参考(三) - <OBJECT> 声明
- · Global.asa 参考(三) - Session 事件
- · Global.asa 参考(二) - Application 事件
- · Global.asa 参考(一) - 总述
- · ADO如何使用Delete语法
- · 测试客户端屏幕状况
- · 使用隐藏form把数据从客户端传到服务端
- · 用GetString来提高ASP的速度
- · ADO如何使用Update语法
- · ASP的几大可扩展组件(一)
- · 在VBSript中使用regular expression取得子字串
- · Developing ASP-Based Applications
- · ASP缓存技术
- · ASP注册表项目修改
- · ASP和SQL结合处理时间小解
- · ASP实现多语言支持
