在ADO使用SELECT语法六
2008-02-23 05:35:53来源:互联网 阅读 ()
在一个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,在用户端使用浏览器,浏览执行的结果,显示分数大于或等于张三任何算术分数的记录。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:在ADO使用SELECT语法五
下一篇:asp 语法介绍(一)
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash