上一篇:调试 ASP 脚本 >>
在ADO使用SELECT语法五
join连接组合两个表中的字段记录,包括三种:
inner join运算式:连接组合两个表中的字段记录。
left join运算式:连接组合两个表中的字段记录,并将包含了left join左边表中的全部记录。
right join运算式:连接组合两个表中的字段记录,并将包含了right join右边表中的全部记录。
inner join设定两个表相关连的运算式,以连接组合两个表中的字段记录。
inner join语法如下:
from 表1 inner join 表2 on 表1.字段1 比较运算子 表2.字段2
两个表连接的字段,譬如 [表1.字段1=表2.字段2],必须具有相同的字段类型,但是字段名称不需要相同。
例如,自动编号字段类型可以连接long 的字段类型,但是单精整数字段类型不能连接双精整数的字段类型。
比较运算子可为=、<、>、<=、>=、或<>。
join连接的字段,不可以包含memo字段类型或ole对象类型,否则会发生错误。
在一个join表达式中,可以连结多个on子句:
select fields
from 表1 inner join 表2
on 表1.字段1 比较运算子 表2.字段1 and
on 表1.字段2 比较运算子 表2.字段2) or
on 表1.字段3 比较运算子 表2.字段3)
join表达式中,可以为巢状式:
select fields
from 表1 inner join
(表2 inner join [( ]表3
[inner join [( ] 表x [inner join ...)]
on 表3.字段3 比较运算子 表x.字段x)]
on 表2.字段2 比较运算子 表3.字段3)
on 表1.字段1 比较运算子 表2.字段2
在一个inner join中,可以包括巢状式的left join或right join,但是在一个left join或right join中不能包括巢状式的inner join。
让我们看一个于asp程式当中使用这个sql指令的例子。
可以利用inner join...on组合两个表中的记录,譬如asp程式rs26.asp如下,[select 销售.代号, 产品.名称, 产品.价格, 销售.数量 from 销售 inner join 产品 on 产品.代号 = 销售.代号],使用inner join...on设定两个表相关连的运算式,组合两个表中的记录:
<%
set conn1 = server.createobject("adodb.connection")
conn1.open "dbq="& server.mappath("ntopsamp.mdb") &";driver={microsoft access driver (*.mdb)};driverid=25;fil=ms access;"
set rs3 = server.createobject("adodb.recordset")
sql = "select 销售.代号, 产品.名称, 产品.价格, 销售.数量 from 销售 inner join 产品 on 产品.代号 = 销售.代号"
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>
</tr>
<% do while not rs3.eof %>
<tr>
<td bgcolor="f7efde" align=center><%= rs3(0)%></td>
<td bgcolor="f7efde" align=center><%= rs3(1)%></td>
<td bgcolor="f7efde" align=center><%= rs3(2)%></td>
<td bgcolor="f7efde" align=center><%= rs3(3)%></td>
</tr>
<%
rs3.movenext
loop
rs3.close
%>
</table>
以上的 asp程式rs26.asp,在用户端使用浏览器,浏览执行的结果,显示组合两个表中的记录,由于销售表中并没有名称字段和价格字段,通过 [inner join 产品 on 产品.代号 = 销售.代号] 找到产品表的名称字段和价格字段之资料。
上例使用inner join的语法:
select 销售.代号, 产品.名称, 产品.价格, 销售.数量 from 销售 inner join 产品 on 产品.代号 = 销售.代号
结果与以下使用where相同:
select 销售.代号, 产品.名称, 产品.价格, 销售.数量 from 销售, 产品 where 产品.代号 = 销售.代号
left join/right join
inner join连接组合两个表中相关连的字段记录,为内部连接,您还可以使用:
使用left join运算:来建立一个左边外部连接。left join除了取得两个表中相关连的字段记录,并将包含了left join左边表中的全部记录,不管在右边表中是否有相符的记录。
使用right join运算:建立一个右边外部连接。right join除了取得两个表中相关连的字段记录,并将包含了right join右边表中的全部记录,不管在左边表中是否有相符的记录。
例如,[销售left join 产品] 可以选取所有的销售记录。[销售right join 产品] 可以选取所有的产品记录。
譬如利用left join...on除了取得两个表中相关连的字段记录,并包含了left join左边表中的全部记录, asp程式rs26.asp如下,[select 销售.代号, 产品.名称, 产品.价格, 销售.数量 from 销售 left join 产品 on 产品.代号 = 销售.代号],使用left join包含了left join左边销售表中的全部记录:
<%
set conn1 = server.createobject("adodb.connection")
conn1.open "dbq="& server.mappath("ntopsamp.mdb") &";driver={microsoft access driver (*.mdb)};driverid=25;fil=ms access;"
conn1.open "driver={sql server};server=(local);uid=sa;pwd=;database=ntopsamp"
set rs3 = server.createobject("adodb.recordset")
sql = "select 销售.代号, 产品.名称, 产品.价格, 销售.数量 from 销售 left join 产品 on 产品.代号 = 销售.代号"
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>
</tr>
<% do while not rs3.eof %>
<tr>
<td bgcolor="f7efde" align=center><%= rs3(0)%></td>
<td bgcolor="f7efde" align=center><%= rs3(1)%></td>
<td bgcolor="f7efde" align=center><%= rs3(2)%></td>
<td bgcolor="f7efde" align=center><%= rs3(3)%></td>
<%
rs3.movenext
loop
rs3.close
%>
</table>
以上的asp程式rs26.asp,在用户端使用浏览器,浏览执行的结果,显示包含了left join左边销售表中的全部记录,由于销售表中并没有名称字段和价格字段,代号4的销售记录,通过 [销售 left join 产品 on 产品.代号 = 销售.代号] 找到产品表的名称字段和价格字段之资料,其他的代号并没有找到名称字段和价格字段之资料。
利用 right join...on除了取得两个表中相关连的字段记录,并包含了right join右边表中的全部记录,譬如asp程式rs26.asp如下,[select 销售.代号, 产品.名称, 产品.价格, 销售.数量 from 销售 right join 产品 on 产品.代号 = 销售.代号],使用right join包含了right join右边产品表中的全部记录:
<%
set conn1 = server.createobject("adodb.connection")
conn1.open "dbq="& server.mappath("ntopsamp.mdb") &";driver={microsoft access driver (*.mdb)};driverid=25;fil=ms access;"
set rs3 = server.createobject("adodb.recordset")
sql = "select 销售.代号, 产品.名称, 产品.价格, 销售.数量 from 销售 right join 产品 on 产品.代号 = 销售.代号"
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>
</tr>
<% do while not rs3.eof %>
<tr>
<td bgcolor="f7efde" align=center><%= rs3(0)%></td>
<td bgcolor="f7efde" align=center><%= rs3(1)%></td>
<td bgcolor="f7efde" align=center><%= rs3(2)%></td>
<td bgcolor="f7efde" align=center><%= rs3(3)%></td>
<%
rs3.movenext
loop
rs3.close
%>
</table>
以上的 asp程式rs26.asp,在用户端使用浏览器,浏览执行的结果,显示包含了right join右边产品表中的全部记录,由于产品表中并没有数量字段,代号4的产品记录,通过 [销售 right join 产品 on 产品.代号 = 销售.代号] 找到销售表的数量字段之资料,其他的代号并没有找到数量字段之资料。
搞清楚了吗?
()
下一篇:在ADO使用SELECT语法四 >>
相关文章:
- · 给你的FileSystemObject对象加把锁
- · 用纯ASP代码实现图片上传并存入数据库中
- · 对数据库中的记录用上一条下一条显示(三)
- · 对数据库中的记录用上一条下一条显示(二)
- · 对数据库中的记录用上一条下一条显示(一)
- · ASP的几大可扩展组件(二)
- · ASP的几大可扩展组件(一)
- · 在VBSript中使用regular expression取得子字串
- · 提高IIS 5.0执行效率
- · ADO如何锁定RecordSet的记录呢?
- · Developing ASP-Based Applications
- · ASP缓存技术
- · ASP注册表项目修改
- · ASP和SQL结合处理时间小解
- · ASP实现多语言支持
- · 如何用ASP创建日志文件
- · 用ASP实现号码转换
- · 用ASP进行网络打印功能
- · 用ASP发送邮件
- · 一个让用户更改密码的简单程序!
- · 不能ASP图像组件来生成图像的ASP计数器程序(三)
- · 不能ASP图像组件来生成图像的ASP计数器程序(二)
- · 不能ASP图像组件来生成图像的ASP计数器程序(一)
- · 在ASP中用集合成批操作数据库
- · ASP检索网站指定目录文件的算法与应用方向
- · 网页计数器的程序
- · ADO如何取得数据库中表的字段信息之二
- · ADO如何取得数据库中表的字段信息之一
- · 如何使用ASP产生象安装向导的主页
- · 好东西,翻页程序,大家可以参考
- · 大部分的ADO的错误码对应的含义
- · Recordset对象方法详解
- · 不用数据源打开数据库(DSNless connection)
- · 处理二进制数据
- · 利 用 ISAPI 实 现 向 数 据 库 中 添 加 记 录 (六)
- · 利 用 ISAPI 实 现 向 数 据 库 中 添 加 记 录 (五)
- · 利 用 ISAPI 实 现 向 数 据 库 中 添 加 记 录 (四)
- · 利 用 ISAPI 实 现 向 数 据 库 中 添 加 记 录 (三)
