欢迎光临
我们一直在努力

在ADO使用SELECT语法五

建站超值云服务器,限时71元/月

join

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 产品.代号 = 销售.代号] 找到销售表的数量字段之资料,其他的代号并没有找到数量字段之资料。

搞清楚了吗?

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在ADO使用SELECT语法五
分享到: 更多 (0)