asp的ado中使用SELECT-sql语法(六)

子查询

在一个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,在用户端使用浏览器,浏览执行的结果,显示新 [电脑] 表的记录。

时间: 2024-11-04 18:47:35

asp的ado中使用SELECT-sql语法(六)的相关文章

asp的ado中使用SELECT-sql语法(一)

SELECT表达式 接着,让我们看看SELECT表达式,SELECT用来在表中寻找符合特定条件的记录,语法如下: SELECT [关键字] { * | 表名称.* | [表名称.]字段名称1 [AS 别名1] [, [表名称.] 字段名称2 [AS 别名2] [, ...]]} FROM 表运算式 [, ...] [IN 外部表] [WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] [WITH OWNERACCESS OPTION] 关键

asp的ado中使用SELECT-sql语法(二)

接上一篇文章: WHERE可以使用下面的BETWEEN.LIKE.IN运算子. Between...And Between...And判断表达式的值是否落在指定的范围之中.语法为: expr Between value1 And value2 表示如果expr的值介于value1和value2之间,则Between...And运算子会返回True:否则它会返回False. 您也可以加上逻辑运算 Not expr Between value1 And value2,来判断相反的条件,即expr落在

asp.net C#中怎样接受SQL 返回select受影响的行数

asp教程.net C#中怎样接受SQL 返回select受影响的行数 '实例二 OleDbCommand command = new OleDbCommand(select count(*) from biao where name="张三" ,conn);   OleDbDataReader reader = command.ExecuteReader();       if (reader.Read())   {   strValue = (string)reader.GetVa

asp的ado中使用SELECT-sql语法(五)

Join JOIN连接组合两个表中的字段记录,包括三种: INNER JOIN运算式:连接组合两个表中的字段记录. LEFT JOIN运算式:连接组合两个表中的字段记录,并将包含了LEFT JOIN左边表中的全部记录. RIGHT JOIN运算式:连接组合两个表中的字段记录,并将包含了RIGHT JOIN右边表中的全部记录. INNER JOIN设定两个表相关连的运算式,以连接组合两个表中的字段记录. INNER JOIN语法如下: FROM 表1 INNER JOIN 表2 ON 表1.字段1

asp的ado中使用SELECT-sql语法(四)

HAVING HAVING使用于SELECT 表达式中,筛选已经GROUP BY统计的记录.在GROUP BY统计记录后,HAVING将筛选与HAVING子句中条件相吻合的记录. 语法如下: SELECT fieldlistFROM tableWHERE selectcriteriaGROUP BY groupfieldlist[HAVING groupcriteria] .groupcriteria表示决定应筛选的统计记录. HAVING与WHERE相类似,是用来决定选取哪些记录.当使用GRO

asp的ado中使用SELECT-sql语法(三)

接上一篇文章: ORDER BY ORDER BY子句,可以设定排序的字段. 在一个SQL表达式之中,ORDER BY子句通常放置于最后. 若要以递减顺序来进行排序(Z~A,9 ~0),须于您要递减排序的每一字段的尾部加DESC字.譬如: SELECT 姓名 FROM 员工 ORDER BY 工资 DESC, 年龄 表示[工资] 字段以递减顺序来进行排序,[年龄] 字段以递增顺序来进行排序. ORDER BY子句中排序的字段,不可以包含MEMO字段类型或OLE对象类型,否则会发生错误. 在ORD

ORACLE中常用的SQL语法和数据对象

一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, --) VALUES ( 值1, 值2, --); INSERT INTO 表名(字段名1, 字段名2, --) SELECT 字段名1, 字段名2, -- FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: 'GOOD DAY' 如果字段值里包含单引号' 需要进行字符串转换, 我们把它替换成两个单引号''. 字符串类型的字段值超过定义的长

全面接触SQL语法

sql语法 SQL功能与特性 其实,在前面的文章中,已经提及SQL命令的一些基本功能,然而,通过SQL命令,程序设计师或数据库管理员(DBA)可以: (一)建立数据库的表格.(包括设置表格所可以使用之空间) (二)改变数据库系统环境设置. (三)针对某个数据库或表格,授予用户存取权限. (四)对数据库表格建立索引值. (五)修改数据库表格结构.(新建.删除或是修改表格字段) (六)对数据库进行数据的新建. (七)对数据库进行数据的删除. (八)对数据库进行数据的修改. (九)对数据库进行数据的查

全面接触SQL语法(1)

sql语法 SQL功能与特性 其实,在前面的文章中,已经提及SQL命令的一些基本功能,然而,通过SQL命令,程序设计师或数据库管理员(DBA)可以: (一)建立数据库的表格.(包括设置表格所可以使用之空间) (二)改变数据库系统环境设置. (三)针对某个数据库或表格,授予用户存取权限. (四)对数据库表格建立索引值. (五)修改数据库表格结构.(新建.删除或是修改表格字段) (六)对数据库进行数据的新建. (七)对数据库进行数据的删除. (八)对数据库进行数据的修改. (九)对数据库进行数据的查