在ADO使用SELECT语法五
2000-08-14 09:46:26 来源:WEB开发网核心提示:JoinJOIN连接组合两个表中的字段记录,包括三种:INNER JOIN运算式:连接组合两个表中的字段记录,在ADO使用SELECT语法五, LEFT JOIN运算式:连接组合两个表中的字段记录,并将包含了LEFT JOIN左边表中的全部记录,代号4的产品记录,通过 [销售 Right Join 产品 On 产品.代
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 产品.代号 = 销售.代号] 找到销售表的数量字段之资料,其他的代号并没有找到数量字段之资料。
搞清楚了吗?
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 产品.代号 = 销售.代号] 找到销售表的数量字段之资料,其他的代号并没有找到数量字段之资料。
搞清楚了吗?
[]
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››Adobe发布Acrobat X 不支持苹果iOS系统
- ››使用纯文本文件打造WCF服务
- ››使用 Dojo 开发定制 Business Space 小部件,第 4...
- ››使用 ADDRESS 与 INDIRECT函数查询信息
更多精彩
赞助商链接