在ADO使用SELECT语法一

  • 来源: 互联网 作者: 若水   2008-03-17/11:24
  • SELECT表达式

    接着,让我们看看SELECT表达式,SELECT用来在表中寻找符合特定条件的记录,语法如下:

    SELECT }
    FROM 表运算式






    关键字:可以用来限制返回之记录的数量,可以设定为ALL、DISTINCT、DISTINCTROW 、或TOP。如果没有指定述语,缺省值为 ALL。

    *:选取全部的字段。

    别名:代替在表中原有的字段名称。

    表运算式:一个或多个以逗号分隔的表名称。

    外部表:如果表不存在目前的表当中,须设定包含表运算式中表的表名称。

    执行SELECT 表达式,并不会改变表之中现有的资料。

    一个 SELECT 表达式的最基本语法是:

    SELECT * FROM 表运算式

    您可以使用星号(*)来选取表的全部字段。譬如下例选取 表中的全部字段:

    SELECT * FROM 产品

    字段名称包含空格或标点符号时,须使用括号将它括在其中。例如:

    SELECT

    如果在FROM子句中的字段名称中,包含多个的表中时,需在字段名称前加上表名称和点(.)运算子,即 表名称.字段名称。譬如下例选取 字段:

    SELECT 产品.价格, 订单.数量

    FROM 产品, 订单

    WHERE 产品.代号 = 订单.代号

    当您使用Recordset 对象时,Recordset并不认得rs(表名称.字段名称) 格式,即rs(“产品.价格”)会发生错误,您必须使用AS来设定字段名称的别名。譬如:

    SELECT 产品.价格 AS 价格, 订单.数量AS 数量

    FROM 产品, 订单

    WHERE 产品.代号 = 订单.代号

    如此就可以使用rs(“价格”) 和rs(“数量”),来读取其字段的资料。

    与SELECT表达式相关的语法:


    关键字:ALL/ DISTINCT/ DISTINCTROW/ TOP。

    WHERE:寻找FROM中的表符合特定条件的资料记录。WHERE 可以使用下面的BETWEEN、LIKE、IN运算子:

    Between...And:判断表达式的值是否落在指定的范围之中。

    Like:寻找相符合的关键字。

    IN运算式:限定范围。

    NOT IN运算式:表示不属于所指定的范围。

    ORDER BY子句:可以设定排序的字段。

    GROUP BY子句:将查询的结果做统计。

    HAVING子句:使用在SELECT 表达式中,筛选已经GROUP BY统计的记录。

    Union:可以合并多组查询的结果。

    JOIN:连接组合两个表中的字段记录。

    子查询(sub query):表达式中,可以包括SELECT表达式。

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


    详细介绍如下:

    ALL/DISTINCT/DISTINCTROW/TOP关键字

    使用SELECT查询时,可以加上关键字,以选取所查询的记录。如下:


    ALL:返回所有的记录。

    DISTINCT:指定字段中的记录有重复时只返回一条记录,记录不重复。

    DISTINCTROW:指定字段中的记录有重复时都不返回。

    TOP:返回前面几个记录或几个百分比的记录。


    语法如下:

    SELECT
    FROM 表

    ALL返回所有的记录。不加关键字时,与加ALL的意义相同,将返回所有的记录。譬如下列两个例子的执行结果相同,都从产品表中返回所有的记录:

    SELECT ALL * FROM 产品

    与以下的执行结果相同:

    SELECT * FROM 产品

    DISTINCT不选取指定字段之中的重复资料。使用DISTINCT后,查询的结果,列在SELECT DISTINCT后的每个字段的资料值,若相同则只取一条记录,换句话说,指定字段的资料不会有重复的现象。例如,在产品表之中有一些产品名称相同的产品,加上DISTINCT的SQL表达式只会返回一条记录字段为产品名称资料相同的记录:

    SELECT DISTINCT 产品名称 FROM 产品

    如果您不加上DISTINCT,上例查询将返回数个包含相同产品名称的记录。

    如果SELECT DISTINCT子句后指定数个字段,查询的结果,所有字段的组合值不会有重复的现象。

    DISTINCTROW则不返回指定字段所有重复的记录。

    TOP n ,返回前面几条记录或几个百分比的记录。排列的顺序可以使用ORDER BY子句来指定。譬如找到成绩前10名的学生姓名:

    SELECT TOP 10 姓名
    FROM 学生
    ORDER BY 成绩

    如果您没有包含ORDER BY子句,查询将由学生表返回任意的10个记录。

    TOP不在相同值间作选择,如果第10及第11的成绩是相同的,查询将返回11个记录。

    您可使用PERCENT来设定前面几个百分比的记录,譬如譬如找到成绩前10%的学生姓名:

    SELECT TOP 10 PERCENT 姓名
    FROM 学生
    ORDER BY 成绩

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

    可以利用Distinct找出不重复的记录,譬如ASP程式rs7.asp如下, 使用Distinct与Insert Into新增代号为C2000的记录:

    <%

    'Distinct 代号,名称只判断代号,名称是否相同, 相同者只加一条记录

    sql = "Insert Into 产品(代号,名称) Select Distinct 代号,名称 From 产品 where 代号 ='C2000'"

    Set a = conn1.Execute(sql)

    Set rs3 = Server.CreateObject("ADODB.Recordset")

    sql = "Select * from 产品 where 代号 ='C2000'"

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

    </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>

    WHERE

    WHERE寻找FROM中的表符合特定条件的资料记录,WHERE 使用在SELECT、UPDATE、或DELETE表达式。

    如果SELECT查询中没有指定WHERE子句,将返回表中所有的资料。如果在SELECT查询多个表,且没有使用WHERE子句、或JOIN 子句的话,查询结果为多个表资料的乘积。

    WHERE设定特定的条件,譬如:


    FROM 产品 WHERE 分类 = '电脑':表示选择

    WHERE 价格 Between 1000 And 5000:表示价格介于1000至5000之间 。

    一个WHERE子句,最多可包含40个运算式,运算式之间由AND或OR等逻辑运算子相连结。

    设定特定的条件时,依照字段类型,前后加不同的符号,譬如:


    文字:前后加单引号,譬如WHERE 分类 = '电脑'。

    数字:前后不加符号,譬如WHERE 数量 > 100。

    日期:前后加#号,譬如WHERE 日期 = #5/15/99#。

    WHERE可以使用下面的BETWEEN、LIKE、IN运算子。  

    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

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

    驱动号 更多