asp多表联合查询总结

ASP 1672 0 2014-03-08

asp多表联合查询总结
多表查询
在程序开发过程中,不仅可以对单一数据表进行查询,还可以进行多表查询,用户通过多表查询从多个表中提取出需要的数据。
多表查询可以分为内连接查询、外连接查询以及联合查询。
1.内连接查询
连接查询是指通过各个表之间共同列的关联性查询数据。连接查询分为内连接查询和外连接查询。内连接是将两个相互交叉的数据集合中重叠部分的数据行连接起来,返回表示两个数据集合之间匹配连接关系的数据行。
可以在FORM子句中使用INNER JOIN…ON…建立内连接,也可以在WHERE子句中指定连接条件建立内连接,例如:
<% Conn.Execute("select a.UserName,b.BookName,b.Datetm from UserInfo as a inner join SellSheet as b on a.UserID= b.UserID") %>
也可以用下面的语句实现。
<% Conn.Execute("select a.UserName,b.BookName,b.Datetm from UserInfo as a,SellSheet as b where a.UserID=b.UserID")%>
下面在SQL语句FROM后面使用INNER JOIN和ON关键字关联数据表“UserInfo”和“SellSheet”,并根据输入的用户名称进行查询。程序代码如下:
<%
If Trim(Request("txt_name"))<>"" Then txt_name=Trim(Request("txt_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
%>
2.外连接查询
外连接是对内连接的扩充,除了将两个数据集合中重叠部分以内的数据行连接起来之外,还可以根据要求返回左侧或右侧数据集合中非匹配的数据,即左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。
l    左外连接LEFT OUTER JOIN
左外连接LEFT OUTER JOIN逻辑运算符除了返回两个数据表中满足连接条件的行,它还返回任何在后一个数据表中没有匹配行的前一个数据表中的行。非匹配行的部分字段列作为空值返回。
下面使用LEFT OUTER JOIN在数据表“UserInfo”和“SellSheet”之间建立左外连接,并可以根据输入的用户名称查询所有满足条件的用户信息(即使该用户未购买图书)。程序代码如下:
<%
If Trim(Request("txt_name"))<>"" 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 left outer join SellSheet as b on a.UserID = b.User ID where a.UserName like '%"&txt_name&"%'"
rs.open sqlstr,Conn,1,1
%>
l    右外连接RIGHT OUTER JOIN
右外连接RIGHT OUTER JOIN是左外连接的反向连接。它除了返回两个数据表中满足连接条件的行,还返回任何在前一个数据表中没有匹配行的后一个数据表中的行。非匹配行的部分字段列作为空值返回。
下面使用RIGHT OUTER JOIN在数据表“UserInfo”和“SellSheet”之间建立右外连接,并可以根据输入的图书名称查询所有的图书信息(即使该图书没有用户名称相对应)。程序代码如下:
<%
If Trim(Request("txt_name"))<>"" 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
%>
3.使用UNION进行联合查询
使用UNION运算符可以进行联合查询。UNION运算符连接多个SELECT语句,将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中所有查询的全部行。
使用UNION运算符遵循的规则如下:
(1)在使用UNION运算符组合的语句中,所有选择列表的表达式数目必须相同(列名、算术表达式、聚集函数等)。
(2)在使用UNION组合的结果集中的相应列必须具有相同数据类型,或者两种数据类型之间必须存在可能的隐性数据转换,或者提供了显式转换。例如,在datetime数据类型的列和binary数据类型的列之间不能使用UNION运算符,除非提供了显式转换,而在money数据类型的列和int数据类型的列之间可以使用UNION运算符,因为它们可以进行隐性转换。
(3)结果集中列的名字或者别名是由第一个SELECT语句的选择列表决定的。
下面使用UNION运算符连接数据表“UserInfo”和“SellSheet”,根据输入的用户名称查询并同时显示该用户的名称和购买图书的名称。程序代码如下:
<%
If Trim(Request("txt_name"))<>"" Then txt_name=Trim(Request("txt_name"))
Set rs=Server.CreateObject("ADODB.Recordset")
sqlstr="select UserID,UserName from UserInfo where UserName='"&txt_name&"' union select UserID,BookName from Sell Sheet where UserName='"&txt_name&"'"
rs.open sqlstr,Conn,1,1
%>
注意:对数据表进行联合查询时,结果集中行的最大数量是各表行数之“和”,而对数据表进行连接查询时,结果集中行的最大数量是各表行数之“积”。

上一篇:ASP导出word,Excel数据的方法

下一篇:jquery实现对联广告代码

讨论数量:1

天涯网魂 3 杠 5 星2014-03-08 17:16:08

 在asp编程开发过程中,从两表或者两张以上的表获取数据的几种方法
功能:sql联合查询

假设有表
users表(用户表),字段名:userid,username;
product表(产品表),字段名:productid,productname,userid,addtime

现在要显示所有的产品,并且显示出来某个产品对应的用户名

1、使用sql语句的联合查询
select productid,productname,username,addtime from product,users where users.userid=product.userid

2、使用access查询功能
在access表中,可以创建查询,然后对”查询“进行查询,这种方法对多次查询非常好用,如:先对某两张表进行联合查询,得到一个结果集,然后再查询这个结果集与另一个表进行联合查询。
方法:(这里使用office2010)创建--查询设计--关闭,然后在空白处右击--sql视图,然后把sql语句复制到里面去,保存,给这个查询起个名字,asp中直接把这个名字当作表名使用就行了,字段名就是sql语句中的字段名,你也可以双击左边的查询名看看查询里面有什么东西,是不是和表一样。

3、sql server使用存储过程
打开数据库--可编程性--存储过程(右击)--创建新的存储过程 

请先登录再发表讨论。 2024-04-29

天涯网魂
3 杠 5 星
TA 的文章
TA 的随言
TA 的资源链