在ADO使用SELECT语法六

  • 来源: 互联网 作者: 若水   2008-03-17/11:30
  • 子查询

        在一个SELECT、SELECT...INTO、INSERT...INTO、DELETE、或UPDATE 表达式中,可以包括SELECT表达式,这个SELECT表达式叫做子查询(sub query)。

    您可以使用三种语法建立子查询:



    表达式 (子查询)


    表达式 IN (子查询)


    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如下, 找出分数大于或等于张三的算术考试的算术记录:

    <%

    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如下, 找出分数大于或等于张三任何算术分数的记录:

    <%

    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如下, 找出分数大于或等于张三任何算术分数的记录:

    <%

    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#p#分页标题#e#

    Select...Into将查询的结果,建立一个产生的表。

    语法如下:

    SELECT 字段1
    FROM 表

    新表的名称不可与现存表的名称相同,否则将会发生错误。

    Select...Into所建立的新表,其字段的资料类型及大小与所查询的表相同。

    让我们看一个于ASP程式当中使用这个SQL指令的例子。

        譬如ASP程式rs9.asp如下, 表:

    <%

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


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多