你的位置:| 首页网站建设多表联合查询→文章正文  
文章导航


多表联合查询

多表查询
在程序开发过程中,不仅可以对单一数据表进行查询,还可以进行多表查询,用户通过多表查询从多个表中提取出需要的数据。
多表查询可以分为内连接查询、外连接查询以及联合查询。

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
%>
注意:对数据表进行联合查询时,结果集中行的最大数量是各表行数之“和”,而对数据表进行连接查询时,结果集中行的最大数量是各表行数之“积”。

  上一页 1 2 3 4 5 下一页
 
公司简介 在线客服 客服中心 意见反馈 相关法律 隐私条款 广告服务 友情链接
Q链:515347638  电子邮箱:hanen@126.com 粤ICP备05086553