ADO での SELECT 構文 5 の使用
著者:Eve Cole
更新時間:2009-05-30 19:54:26
参加する
JOIN 接続は、次の 3 つのタイプを含む 2 つのテーブルのフィールド レコードを結合します。
INNER JOIN 演算式: 2 つのテーブルのフィールド レコードを結合して結合します。
LEFT JOIN 演算式: 2 つのテーブルのフィールド レコードを結合して結合し、LEFT JOIN の左側のテーブルのすべてのレコードを含めます。
RIGHT JOIN 演算式: 2 つのテーブルのフィールド レコードを結合して結合し、RIGHT JOIN の右側のテーブル内のすべてのレコードを含めます。
INNER JOIN は、2 つのテーブルのフィールドレコードを結合して結合するための 2 つのテーブルに関する演算式を設定します。
INNER JOIN 構文は次のとおりです。
FROM テーブル 1 INNER JOIN テーブル 2 ON テーブル 1. フィールド 1 比較演算子 テーブル 2. フィールド 2
[テーブル 1. フィールド 1 = テーブル 2. フィールド 2] など、2 つのテーブルを接続するために使用されるフィールドは同じフィールド タイプである必要がありますが、フィールド名は同じである必要はありません。
たとえば、オートナンバー型フィールド タイプは長整数型フィールド タイプに接続できますが、単一整数フィールド タイプは倍精度整数フィールド タイプに接続できません。
比較演算子には、=、<、>、<=、>=、または <> を使用できます。
JOIN で接続されたフィールドには MEMO フィールド タイプまたは OLE オブジェクト タイプを含めることはできません。そうでない場合は、エラーが発生します。
JOIN 式では、複数の ON 句を接続できます。
SELECTフィールド
FROM テーブル 1 INNER JOIN テーブル 2
ON 表 1. フィールド 1 比較演算子表 2. フィールド 1 AND
ON 表 1. フィールド 2 比較演算子 表 2. フィールド 2) OR
ON テーブル 1. フィールド 3 比較演算子 テーブル 2. フィールド 3)
JOIN 式はネストできます。
SELECTフィールド
表 1 の内部結合より
(表 2 内部結合 [( ]表 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 コマンドを使用する例を見てみましょう。
内部結合...オンを使用して、2 つのテーブルのレコードを結合できます。たとえば、[売上コード、製品名、売上数量を選択します。 Inner Join Product On Product.Code = Sales.Code] を使用して、Inner Join...On を使用して 2 つのテーブルに関連する計算式を設定し、2 つのテーブルのレコードを結合します。
<%
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 = "SalesInner から Sales.Code、Product.Name、Product.Price、Sales.Quantity を選択し、ProductOn Product.Code = Sales.Code を結合します。"
rs3.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>
<% 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
ループ
rs3.閉じる
%>
</テーブル>
上記の ASP プログラム rs26.asp は、クライアント側のブラウザを使用して実行結果を参照し、結合された 2 つのテーブルのレコードを表示します。売上テーブルには名前フィールドと価格フィールドがないため、[Inner Join Product On Product.] Code = Sales.Code] 製品テーブルの名前フィールドと価格フィールドのデータを検索します。
上の例では、内部結合の構文を使用しています。
SalesInner から Sales.Code、Product.Name、Product.Price、Sales.Quantity を選択します。 ProductOn Product.Code = Sales.Code に結合します。
Where を使用した場合、結果は次と同じになります。
Sales、ProductWhere Product.Code = Sales.Code から Sales.Code、Product.Name、Product.Price、Sales.Quantity を選択します。
左結合/右結合
INNER JOIN 接続は、2 つのテーブル内の関連フィールド レコードを結合します。これは内部接続です。次のものも使用できます。
LEFT JOIN 操作を使用して、左外部結合を作成します。 LEFT JOIN では、2 つのテーブルの関連フィールド レコードを取得するだけでなく、右側のテーブルに一致するレコードがあるかどうかに関係なく、LEFT JOIN の左側のテーブルのすべてのレコードも含まれます。
RIGHT JOIN 操作を使用します。右外部接続を作成します。 RIGHT JOIN では、2 つのテーブルの関連フィールド レコードを取得するだけでなく、左側のテーブルに一致するレコードがあるかどうかに関係なく、RIGHT JOIN の右側のテーブルのすべてのレコードも含まれます。
たとえば、[Sales LEFT JOIN Products] では、すべての販売レコードを選択できます。 [RIGHT JOIN 商品の販売] すべての商品レコードを選択できます。
たとえば、Left Join...On を使用すると、2 つのテーブルの関連フィールド レコードが取得されるだけでなく、LEFT JOIN の左側のテーブルのすべてのレコードも含まれます。ASP プログラム rs26.asp は次のようになります。 SalesLeft Join ProductOn Product.Code = Sales.Code] からの code, product.name, product .Price, Sales.Quantity]、左結合を使用すると、LEFT JOIN の左側にある sales テーブルのすべてのレコードが含まれます。
<%
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 "ドライバー={SQL Server};サーバー=(ローカル);uid=sa;pwd=;データベース=NtopSamp"
Set rs3 = Server.CreateObject("ADODB.Recordset")
sql = "SalesLeft から Sales.Code、Product.Name、Product.Price、Sales.Quantity を選択し、ProductOn Product.Code = Sales.Code を結合します。"
rs3.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>
<% 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
ループ
rs3.閉じる
%>
</テーブル>
上記の ASP プログラム rs26.asp では、LEFT JOIN の左側に名前フィールドと価格フィールドがないため、クライアント側のブラウザを使用して実行結果を参照します。売上テーブル、コード番号 4 の売上レコード、[Sales Left Join Product On Product.Code = Sales.Code] により、製品テーブルの名前フィールドと価格フィールドのデータが検索されます。名前フィールドと価格フィールドが見つかりません。
Right Join...On を使用すると、2 つのテーブルの関連フィールド レコードが取得されるだけでなく、RIGHT JOIN の右側のテーブルのすべてのレコードも含まれます。たとえば、ASP プログラム rs26.asp は次のようになります。 Sales Right Join Product On Product.Code = Sales.Code] で、Right Join を使用すると、RIGHT JOIN の右側にある product テーブル内のすべてのレコードが含まれます。
<%
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 = "SalesRight から Sales.Code、Product.Name、Product.Price、Sales.Quantity を選択し、ProductOn Product.Code = Sales.Code を結合します。"
rs3.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>
<% 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
ループ
rs3.閉じる
%>
</テーブル>
上記の ASP プログラム rs26.asp では、製品に数量フィールドがないため、クライアント側のブラウザを使用して実行結果を参照します。テーブルの場合、コード番号 4 の製品レコードが渡されます [Sales Right Join Product On Product.Code = Sales.Code] 売上テーブルの数量フィールドのデータは見つかりません。他のコードの場合、数量フィールドのデータは見つかりません。見つかった。
分かりましたか?