asp经典入门教程 在ASP中使用SQL 语句第22页


当前第2页 返回上一页

假设HTML页面上包含以下代码:
<FORM ACTION="login_post.asp" METHOD="POST">
        <INPUT TYPE="text" NAME="dotname">
        <INPUT TYPE="submit">
</FORM>

在你的login_post.asp 代码页上你希望读取dotname 字段的值,同时找出数据库内匹配的记录:
SQL = "SELECT dotname, ID FROM team WHERE dotname = '" & Request.Form("dotname") & "'"

假如你采用GET 方法,需要把数据库记录同QueryString中的字段值做比较,那么你可以采用同样的基本方法:
SQL = "SELECT dotname, ID FROM team WHERE dotname = '" & Request.QueryString("dotname") & "'"

当然,你还可以把表单字段的值分配给某个变量并把它插入到你的SQL语句中:
dotname = Request.QueryString("dotname")
SQL = "SELECT dotname, ID FROM team WHERE dotname = '" & dotname &"'"

10. 视图

假如页面上有很多条记录,很多情况下,对这些信息按照字母表降序排序会比传统的升序排序显示效率更高。采用你熟悉的ORDER BY 子句,你可以很容易地在页面上增加这一功能,让用户控制其记录显示的视图。

假设你有个页面的名字叫customers.asp ,页面执行会从Customers表内选取全部记录并按照字母表顺序对客户姓氏排序。先前我们已经看到过排序的代码了,为了实现反向排序,你只需要在ORDER BY 表达式之后加上desc 即可:
SQL = "SELECT c_lastname, c_firstname, c_email FROM Customers ORDER BY c_lastnamedesc"

要在静态模式下这也不赖。但是,也许你想修改以上代码使之提供新的GUI功能:
<A >Sort Ascending</A> | <A >Sort Descending</A>
<P>
<%
SQL = "SELECT c_lastname, c_firstname, c_email FROM Customers ORDER BY c_lastname " & sort & " "

set objRec = objConn.Execute(SQL)

While Not objRec.EOF
Response.WriteobjRec("c_lastname") & ", " & objRec("c_firstname") & "
" & objRec("c_email") & "<P>"
objRec.MoveNext
Wend

%>

以上代码最开头的链接允许用户修改页面的视图。你可以重载同一页面来查看这些信息,但是,在Sort Descending链接的情况下,页面会给sort 变量赋值。然后,在SQL语句内就没有指定desc而是采用 sort 变量的值。

下面要做的就是读取页面顶部sort 的值。
<%
    sort = Request.Querystring("sort")
%>

以上代码从URL中检出sort的可用值。

并没有令你费太多的功夫,你还可以调整同一页面允许用户对特定的列排序。简单的SELECT 菜单表单控件列出SORT BY 选项可能是一个更方便的措施。

11. 记录统计

确定数据库内有多少记录,或者确定有多少记录达到了某些标准,这些用ASP完成并非难事。如果你采用了正确的游标类型,你可以用RecordCount 属性获得记录数当然也可以用recordset。但是,有个更简单的办法,这就是在自己的SELECT语句中采用count(*) ,代码如下所示:
SQL = "SELECT count(*) FROM Customers"

或者
SQL = "SELECT count(*) FROM Customers WHERE c_lastname LIKE 'A%'"

举例说明,以下代码将选出一些记录以及这些记录的总数:
SQL = "SELECT c_firstname, c_lastname, count(*) FROM Customers WHERE c_lastname LIKE 'A%'"

但是你不能实现自己的目的。这里采用的“count”函数其实是一种集合函数,意思是只返回单行信息:回答你提出的问题。对第1个SELECT 语句来说,问题是“在客户表内有多少条记录?”查询返回单一的值作为响应,因此它不能同你常规的查询相组合。假如你希望得到其他数据,你需要采用RecordCount

集合函数除了“count”之外还包括AVG、MIN、MAX和SUM等。

12. 连接

任何熟悉SQL和关系数据库的人都遇见过大量的连接类型。最简单的说,连接(join)会把两个表的内容组合到一个虚拟表或者recordset内。假如数据表有效地规一化,或许你会经常从某一个表中选出特定的信息再从另一个表中选出关联信息。这样做就需要简单的“同等连接(equijoin)”。

为了了解实际的连接操作,现在让我们假设在一个数据库内存放了某类软件的相关记录。某个表(Software)包含了软件产品的名称、软件的版本以及其他有关细节:



另一个表(Releases)则存储了软件发布历史的信息,其中包括发布日期和发布状态等(比如测试版、当前版、过时等):


上表中还包含了一个列,内容指向软件表中采用的ID号。所以,通过这种索引软件表的方式,你就知道发布表中software_ID 等于 2的软件是Rome。

你采用连接组合信息,这样就不需要在两个表之间来回折腾了。不过,除了组合信息之外还可以通过连接把有关信息合并。这样,只要发布表内的software_ID 匹配软件表内的ID,你就把匹配信息一起放到一个记录内。

代码如下:
SQL = "SELECT * FROM Software, Releases WHERE software.ID = releases.softwareID"

仔细分析以上的语句,首先注意到两个表名列在了FROM的后面。再根据所采用的连接,今后你可能还会发现语法会有所变化(或者连接类型有变),但是以上的语法是最基本的,显示了数据的联合选择方式。这里的WHERE 子句用来比较特定的ID值。在Software 表内,存在ID 列。同样的,Releases 表内则有个software_ID 列。为了明确你在WHERE 子句里要比较的值,你用表名作为前缀,后面还加上了一个点号(.)。

以下是连接选取数据之后的结果:


注意:在创建连接的时候要仔细考虑选出数据的列。以上代码采用 * 通配符是为了让读者关注于SELECT 代码行的其他部分。但是,正如你从上图看到的那样,你无法选出softwareID 列,因为这一列没有作为recordset部分的增加值。它的作用就是为WHERE 子句所用。

上一页12阅读全文

更多SQL内容来自木庄网络博客


标签:SQL

返回前面的内容

相关阅读 >>

django执行原生sql查询的实现

最新windowsserver2012r2安装与基本配置详细步骤

oracle实现动态sql的拼装要领

navicat连接sql server报错08001怎么办

sql能干什么

sql如何去重查询

sqlserver数据库基础编程详解

mysql基础入门 轻松学习mysql命令

sql server数据表压缩

asp.net中ado sql数据库 笔记汇总 持续更新中

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...