|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
子查询 在一个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,在用户端使用浏览器,浏览执行的结果,显示新 [电脑] 表的记录。 返回类别: 教程 上一教程: 初学ASP编程易犯的一个致命程序问题及解决办法 下一教程: 如何用ASP编写网站统计系统四 您可以阅读与"在ADO使用SELECT语法六"相关的教程: · 在ADO使用SELECT语法二 · 在ADO使用SELECT语法三 · 在ADO使用SELECT语法四 · 在ADO使用SELECT语法一 · 在ADO使用SELECT语法五 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |