在ADO使用SELECT語法5
發(fā)表時(shí)間:2024-02-10 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]JoinJOIN連接組合兩個(gè)表中的字段記錄,包括三種:INNER JOIN運(yùn)算式:連接組合兩個(gè)表中的字段記錄。 LEFT JOIN運(yùn)算式:連接組合兩個(gè)表中的字段記錄,并將包含了LEFT JOIN左邊表中的全部記錄。 RIGHT JOIN運(yùn)算式:連接組合兩個(gè)表中的字段記錄,并將包含了RIGHT JO...
Join
JOIN連接組合兩個(gè)表中的字段記錄,包括三種:
INNER JOIN運(yùn)算式:連接組合兩個(gè)表中的字段記錄。
LEFT JOIN運(yùn)算式:連接組合兩個(gè)表中的字段記錄,并將包含了LEFT JOIN左邊表中的全部記錄。
RIGHT JOIN運(yùn)算式:連接組合兩個(gè)表中的字段記錄,并將包含了RIGHT JOIN右邊表中的全部記錄。
INNER JOIN設(shè)定兩個(gè)表相關(guān)連的運(yùn)算式,以連接組合兩個(gè)表中的字段記錄。
INNER JOIN語法如下:
FROM 表1 INNER JOIN 表2 ON 表1.字段1 比較運(yùn)算子 表2.字段2
兩個(gè)表連接的字段,譬如 [表1.字段1=表2.字段2],必須具有相同的字段類型,但是字段名稱不需要相同。
例如,自動編號字段類型可以連接Long 的字段類型,但是單精整數(shù)字段類型不能連接雙精整數(shù)的字段類型。
比較運(yùn)算子可為=、<、>、<=、>=、或<>。
JOIN連接的字段,不可以包含MEMO字段類型或OLE對象類型,否則會發(fā)生錯(cuò)誤。
在一個(gè)JOIN表達(dá)式中,可以連結(jié)多個(gè)ON子句:
SELECT fields
FROM 表1 INNER JOIN 表2
ON 表1.字段1 比較運(yùn)算子 表2.字段1 AND
ON 表1.字段2 比較運(yùn)算子 表2.字段2) OR
ON 表1.字段3 比較運(yùn)算子 表2.字段3)
JOIN表達(dá)式中,可以為巢狀式:
SELECT fields
FROM 表1 INNER JOIN
(表2 INNER JOIN [( ]表3
[INNER JOIN [( ] 表x [INNER JOIN ...)]
ON 表3.字段3 比較運(yùn)算子 表x.字段x)]
ON 表2.字段2 比較運(yùn)算子 表3.字段3)
ON 表1.字段1 比較運(yùn)算子 表2.字段2
在一個(gè)INNER JOIN中,可以包括巢狀式的LEFT JOIN或RIGHT JOIN,但是在一個(gè)LEFT JOIN或RIGHT JOIN中不能包括巢狀式的INNER JOIN。
讓我們看一個(gè)于ASP程式當(dāng)中使用這個(gè)SQL指令的例子。
可以利用Inner Join...On組合兩個(gè)表中的記錄,譬如ASP程式rs26.asp如下,[Select 銷售.代號, 產(chǎn)品.名稱, 產(chǎn)品.價(jià)格, 銷售.數(shù)量 from 銷售 Inner Join 產(chǎn)品 On 產(chǎn)品.代號 = 銷售.代號],使用Inner Join...On設(shè)定兩個(gè)表相關(guān)連的運(yùn)算式,組合兩個(gè)表中的記錄:
<%
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 銷售.代號, 產(chǎn)品.名稱, 產(chǎn)品.價(jià)格, 銷售.數(shù)量 from 銷售 Inner Join 產(chǎn)品 On 產(chǎn)品.代號 = 銷售.代號"
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">價(jià)格</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">數(shù)量</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,在用戶端使用瀏覽器,瀏覽執(zhí)行的結(jié)果,顯示組合兩個(gè)表中的記錄,由于銷售表中并沒有名稱字段和價(jià)格字段,通過 [Inner Join 產(chǎn)品 On 產(chǎn)品.代號 = 銷售.代號] 找到產(chǎn)品表的名稱字段和價(jià)格字段之資料。
上例使用Inner Join的語法:
Select 銷售.代號, 產(chǎn)品.名稱, 產(chǎn)品.價(jià)格, 銷售.數(shù)量 from 銷售 Inner Join 產(chǎn)品 On 產(chǎn)品.代號 = 銷售.代號
結(jié)果與以下使用Where相同:
Select 銷售.代號, 產(chǎn)品.名稱, 產(chǎn)品.價(jià)格, 銷售.數(shù)量 from 銷售, 產(chǎn)品 Where 產(chǎn)品.代號 = 銷售.代號
LEFT JOIN/RIGHT JOIN
INNER JOIN連接組合兩個(gè)表中相關(guān)連的字段記錄,為內(nèi)部連接,您還可以使用:
使用LEFT JOIN運(yùn)算:來建立一個(gè)左邊外部連接。LEFT JOIN除了取得兩個(gè)表中相關(guān)連的字段記錄,并將包含了LEFT JOIN左邊表中的全部記錄,不管在右邊表中是否有相符的記錄。
使用RIGHT JOIN運(yùn)算:建立一個(gè)右邊外部連接。RIGHT JOIN除了取得兩個(gè)表中相關(guān)連的字段記錄,并將包含了RIGHT JOIN右邊表中的全部記錄,不管在左邊表中是否有相符的記錄。
例如,[銷售LEFT JOIN 產(chǎn)品] 可以選取所有的銷售記錄。[銷售RIGHT JOIN 產(chǎn)品] 可以選取所有的產(chǎn)品記錄。
譬如利用Left Join...On除了取得兩個(gè)表中相關(guān)連的字段記錄,并包含了LEFT JOIN左邊表中的全部記錄, ASP程式rs26.asp如下,[Select 銷售.代號, 產(chǎn)品.名稱, 產(chǎn)品.價(jià)格, 銷售.數(shù)量 from 銷售 Left Join 產(chǎn)品 On 產(chǎn)品.代號 = 銷售.代號],使用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 銷售.代號, 產(chǎn)品.名稱, 產(chǎn)品.價(jià)格, 銷售.數(shù)量 from 銷售 Left Join 產(chǎn)品 On 產(chǎn)品.代號 = 銷售.代號"
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">價(jià)格</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">數(shù)量</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,在用戶端使用瀏覽器,瀏覽執(zhí)行的結(jié)果,顯示包含了LEFT JOIN左邊銷售表中的全部記錄,由于銷售表中并沒有名稱字段和價(jià)格字段,代號4的銷售記錄,通過 [銷售 Left Join 產(chǎn)品 On 產(chǎn)品.代號 = 銷售.代號] 找到產(chǎn)品表的名稱字段和價(jià)格字段之資料,其他的代號并沒有找到名稱字段和價(jià)格字段之資料。
利用 Right Join...On除了取得兩個(gè)表中相關(guān)連的字段記錄,并包含了RIGHT JOIN右邊表中的全部記錄,譬如ASP程式rs26.asp如下,[Select 銷售.代號, 產(chǎn)品.名稱, 產(chǎn)品.價(jià)格, 銷售.數(shù)量 from 銷售 Right Join 產(chǎn)品 On 產(chǎn)品.代號 = 銷售.代號],使用Right Join包含了RIGHT JOIN右邊產(chǎn)品表中的全部記錄:
<%
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 銷售.代號, 產(chǎn)品.名稱, 產(chǎn)品.價(jià)格, 銷售.數(shù)量 from 銷售 Right Join 產(chǎn)品 On 產(chǎn)品.代號 = 銷售.代號"
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">價(jià)格</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">數(shù)量</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,在用戶端使用瀏覽器,瀏覽執(zhí)行的結(jié)果,顯示包含了RIGHT JOIN右邊產(chǎn)品表中的全部記錄,由于產(chǎn)品表中并沒有數(shù)量字段,代號4的產(chǎn)品記錄,通過 [銷售 Right Join 產(chǎn)品 On 產(chǎn)品.代號 = 銷售.代號] 找到銷售表的數(shù)量字段之資料,其他的代號并沒有找到數(shù)量字段之資料。
搞清楚了嗎?