1、项目十二项目十二 u项目背景项目背景 在程序开发过程中,不仅需要对在程序开发过程中,不仅需要对单一数据表进行查询,还要进行多表查询单一数据表进行查询,还要进行多表查询,用户通过多表查询,从多张表中提取出,用户通过多表查询,从多张表中提取出需要的数据。需要的数据。 比如学生信息与学生的成绩是两张比如学生信息与学生的成绩是两张不同的数据库表,但在动态网站开发过不同的数据库表,但在动态网站开发过程中,常常要通过学生的信息去查询或程中,常常要通过学生的信息去查询或修改其学生的成绩;又如学生的成绩与修改其学生的成绩;又如学生的成绩与学科也是不同的数据库表,也经常去查学科也是不同的数据库表,也经常去查找学
2、生某一学科的成绩。找学生某一学科的成绩。 任务任务12.1 使用内连接查询记录使用内连接查询记录 任务任务12.2 使用外连接查询记录使用外连接查询记录 任务任务12.3 使用分页技术使用分页技术u技术导读技术导读本项目技术重点:本项目技术重点: 会使用内连接查询数据库表会使用内连接查询数据库表 会使用外连接查询数据库表会使用外连接查询数据库表 会使用分页技术会使用分页技术 了解什么是了解什么是Web编程,理解编程,理解B/S和和C/S编程模式的优缺点编程模式的优缺点一、任务描述一、任务描述 两表之间的内连接查询记录,可以两表之间的内连接查询记录,可以实现两张不同表之间的关联,在显示的实现两张
3、不同表之间的关联,在显示的效果中,可以用一条记录查看两张表中效果中,可以用一条记录查看两张表中内容,内连接查询可以轻松达到这样的内容,内连接查询可以轻松达到这样的效果,如图效果,如图12-1-1所示。所示。图图12-1-1 内连接查询内连接查询 查询数据库两张表的记录时,可以在查询数据库两张表的记录时,可以在FORM子句中,使用子句中,使用INNER JOINON建建立内连接,也可以在立内连接,也可以在WHERE子句中,指定子句中,指定连接条件建立内连接。连接条件建立内连接。 这两种都是非常常用的连接查询方法。这两种都是非常常用的连接查询方法。12.1.1 内连接查询基础知识内连接查询基础知识
4、 可以在可以在FORM子句中使用子句中使用INNER JOINON建立内连接,也可以在建立内连接,也可以在WHERE子句中指定连接条件建立内连子句中指定连接条件建立内连接,例如:接,例如: 也可以用下面的语句实现。也可以用下面的语句实现。 下面在下面在SQL语句语句FROM后面使用后面使用INNER JOIN和和ON关键字关联数据表关键字关联数据表“UserInfo”和和“SellSheet”,并根据输入,并根据输入的用户名称进行查询。的用户名称进行查询。 程序代码如下。程序代码如下。%If Trim(Request(txt_name) Then txt_name=Trim(Request(t
5、xt_name)Set rs=Server.CreateObject(ADODB.Recordset)Set rs=Server.CreateObject(ADODB.Recordset)sqlstr=select a.UserName,b.BookName,b.Datetm from UserInfo as a inner join SellSheet as b on a.UserID=b.UserID where a.UserName like%&txt_name&%rs.open sqlstr,Conn,1,1%使用使用SQL连接两张表的基本语法是:连接两张表的基本语法是:select
6、* FROM table1 INNER JOIN table2 ON table1 . field1 compopr table2 . field2部部 分分说说 明明table1, table2table1, table2要组合其中的记录的表的名称要组合其中的记录的表的名称field1field1,field2field2要联接的字段的名称。如果它们不是数字,则这些字段的数据类型必须相同,并且包含要联接的字段的名称。如果它们不是数字,则这些字段的数据类型必须相同,并且包含同类数据,但是,它们不必具有相同的名称同类数据,但是,它们不必具有相同的名称compoprcompopr任何关系比较运算符
7、:任何关系比较运算符:“= =”、“ ”、“=”或者或者“”表表12-1 INNER JOIN 的操作内容的操作内容 下例代码显示了通过下例代码显示了通过 CategoryID 字字段,连接段,连接 Categories 和和 Products 表的过表的过程。程。SELECT CategoryName, ProductNameFROM Categories INNER JOIN ProductsON Categories.CategoryID = Products.CategoryID; 也可以在也可以在 JOIN 语句中,链接多个语句中,链接多个 ON 子句,基本语法如下。子句,基本语法如
8、下。SELECT fieldsFROM table1 INNER JOIN table2ON table1.field1 compopr table2.field1 ANDON table1.field2 compopr table2.field2 ORON table1.field3 compopr table2.field3; 也可以通过如下语法,嵌套也可以通过如下语法,嵌套 JOIN 语句,基本语法如下:语句,基本语法如下:SELECT fieldsFROM table1 INNER JOIN(table2 INNER JOIN ( table3INNER JOIN ( tablex I
9、NNER JOIN .) ON table3.field3 compopr tablex.fieldx)ON table2.field2 compopr table3.field3) ON table1.field1 compopr table2.field2; 使用使用UNION运算符遵循的规则如下。运算符遵循的规则如下。 (1)在使用)在使用UNION运算符组合的语句中,所运算符组合的语句中,所有选择列表的表达式数目必须相同(列名、有选择列表的表达式数目必须相同(列名、算术表达式、聚集函数等)。算术表达式、聚集函数等)。 (2)在使用)在使用UNION组合的结果集中的相组合的结果集中的相应
10、列,必须具有相同数据类型,或者两应列,必须具有相同数据类型,或者两种数据类型之间,必须存在可能的隐性种数据类型之间,必须存在可能的隐性数据转换,或者提供了显式转换。数据转换,或者提供了显式转换。 (3)结果集中列的名字或者别名,是由)结果集中列的名字或者别名,是由第一个第一个SELECT语句的选择列表决定。语句的选择列表决定。 程序代码如下。程序代码如下。%If Trim(Request(txt_name) Then txt_name=Trim(Request(txt_name)Set rs=Server.CreateObject(ADODB.Recordset)sqlstr=select U
11、serID,UserName from UserInfo where UserName=&txt_name& union select UserID,BookName from Sell Sheet where UserName=&txt_name&rs.open sqlstr,Conn,1,1% 注意:对数据表进行联合查询时,结注意:对数据表进行联合查询时,结果集中行的最大数量是各表行数之果集中行的最大数量是各表行数之“和和”,而对数据表进行连接查询时,结果集中行而对数据表进行连接查询时,结果集中行的最大数量是各表行数之的最大数量是各表行数之“积积”。 步骤步骤1创建创建ASP网页网页图图1
12、2-1-2 新建新建ASP网页网页 步骤步骤2建立两个数据库表建立两个数据库表图图12-1-3 数据库表数据库表a图图12-1-4 数据库表数据库表b 步骤步骤3输入代码输入代码 两表两表ID相同的字段为相同的字段为 图图12-1-5 网页代码网页代码 步骤步骤4测试代码测试代码图图12-1-6 运行结果运行结果一、任务描述一、任务描述 使用外连接查询记录,也可以实现使用外连接查询记录,也可以实现要求返回左侧或右侧数据集合中非匹配要求返回左侧或右侧数据集合中非匹配的数据,此方法多用于两表或多表间的的数据,此方法多用于两表或多表间的对比,测试效果图如图对比,测试效果图如图12-2-1所示。所示。
13、图图12-2-1 使用外连接查询记录使用外连接查询记录 外连接是对内连接的扩充,除了将外连接是对内连接的扩充,除了将两个数据集合中重叠部分以内的数据行两个数据集合中重叠部分以内的数据行连接起来之外,还可以根据要求返回左连接起来之外,还可以根据要求返回左侧或右侧数据集合中非匹配的数据,即侧或右侧数据集合中非匹配的数据,即左外连接(左外连接(LEFT OUTER JOIN)和右)和右外连接(外连接(RIGHT OUTER JOIN)。)。12.2.1 左外连接左外连接LEFT OUTER JOIN其参考程序代码如下。其参考程序代码如下。%If Trim(Request(txt_name) Then
14、 txt_name=Trim(Request(txt_name)Set rs=Server.CreateObject(ADODB.Recordset)sqlstr=select a.UserName,b.BookName,b.Datetm from UserInfo as a left outer join SellSheet as b on a.UserID = b.User ID where a.UserName like %&txt_name&%rs.open sqlstr,Conn,1,1%基本的参考程序代码如下。基本的参考程序代码如下。%If Trim(Request(txt_nam
15、e) Then txt_name=Trim(Request(txt_name)Set rs=Server.CreateObject(ADODB.Recordset)sqlstr=select a.UserName,b.BookName,b.Datetm from UserInfo as a right outer join SellSheet as b on a.UserID = b.User ID where b.BookName like %&txt_name&%rs.open sqlstr,Conn,1,1% 步骤步骤1创建创建ASP网页网页图图11-2-2 新建新建ASP网页网页 步骤
16、步骤2建立两个数据库表建立两个数据库表图图12-2-3 数据库表数据库表a图图12-2-4 数据库表数据库表b 步骤步骤3输入代码输入代码 左外连接左外连接LEFT OUTER JOIN 图图12-2-5 网页代码网页代码 步骤步骤4测试代码测试代码图图11-2-6 运行结果运行结果一、任务描述一、任务描述 ASP使用分页技术的作用,显示指使用分页技术的作用,显示指定行记录,在记录集较多的时候,一般定行记录,在记录集较多的时候,一般都会用到分页技术,特别是在大型的网都会用到分页技术,特别是在大型的网站上面,尤为常用,分页技术的显示效站上面,尤为常用,分页技术的显示效果如图果如图12-3-1所示
17、。所示。图图12-3-1 分页技术最终效果分页技术最终效果 在动态网页读取数据库中的记录时,有在动态网页读取数据库中的记录时,有些记录的总数有可能有上百条、上千条,甚些记录的总数有可能有上百条、上千条,甚至是上万条,这对于一个页面的显示带来了至是上万条,这对于一个页面的显示带来了很多不方便的地方。很多不方便的地方。 而而pagesize这个属性,通过相关的技术这个属性,通过相关的技术编程,可以实现记录的分页功能。编程,可以实现记录的分页功能。12.3.1 ASP分布技术代码解析分布技术代码解析1连接数据库连接数据库 基本的参考代码如下所示。基本的参考代码如下所示。基本参考代码如下。基本参考代码
18、如下。以下为基本参考代码。以下为基本参考代码。如下代码所示。如下代码所示。当前第当前第 页,共有页,共有 页,共有:页,共有:条记录条记录以下代码显示了基本的参考内容。以下代码显示了基本的参考内容。首页。首页。首页首页上一页。上一页。a href=?curpage=上一页上一页%if rs.pagecount下一页。下一页。a href=?curpage=下下一页一页%if rs.pagecount尾页。尾页。a href=?curpage=尾页尾页1创建数据库创建数据库图图12-3-2 Access数据库软件数据库软件图图12-3-3 保存数据库表保存数据库表图图12-3-4 数据库表设计字
19、段和数据类型数据库表设计字段和数据类型图图12-3-5 输入相应数据输入相应数据 步骤步骤1新建新建Adobe Dreamweaver 页面页面图图12-3-6 新建新建ASP网页网页 步骤步骤2输入代码输入代码 rs.PageCount then 如果接收如果接收的页数大于总页数的页数大于总页数 rs.AbsolutePage = rs.PageCount 设置当前设置当前显示页等于最后页显示页等于最后页 elseif Page 1 then%a Href=test.asp?Page=首页首页 a Href=test.asp?Page=上一页上一页%if request(page)rs.pagecount then %a Href=test.asp?Page=下一页下一页 a Href=test.asp?Page=尾页尾页 图图12-3-7 网页代码网页代码 步骤步骤3测试代码测试代码图图12-3-8 运行结果运行结果