零点教学网(www.0djx.com)-学电脑,学软件,学编程,学网站,学设计!

在ADO使用SELECT语法六

零点教学网 asp教程 2020-07-01 11:33:51 37
子查询

在一个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://0djx.com/zhanzhangxueyuan/ASPjiaocheng/617.html

  在ADO使用SELECT语法六   51自学网ASP编程教程   免费下载在ADO使用SELECT语法六  

(37)
打赏 微信扫一扫
« 上一篇 2020年07月01日 11:33:41
下一篇 » 2020年07月01日 11:33:52

在ADO使用SELECT语法六_相关内容

免费下载在ADO使用SELECT语法六_相关内容