ADO での SELECT 構文 6 の使用
著者:Eve Cole
更新時間:2009-05-30 19:54:23
サブクエリ
SELECT、SELECT...INTO、INSERT...INTO、DELETE、または UPDATE 式には、SELECT 式を含めることができます。この SELECT 式はサブクエリと呼ばれます。
次の 3 つの構文を使用してサブクエリを作成できます。
式 [ANY | SOME] (サブクエリ)
式 [NOT] IN (サブクエリ)
[NOT] EXISTS (サブクエリ)
サブクエリの SELECT 式の構文は一般的な SELECT 式と同じであり、かっこで囲む必要があります。
サブクエリを使用すると、SELECT 式、WHERE 句、HAVING 句内の演算子を置き換えることができます。
キーワード ANY と SOME は同じ意味を持ち、サブクエリに一致するレコードの比較条件を選択するために使用されます。たとえば、次の例では、商品の単価が注文内の 100 を超える数量よりも大きいレコードが返されます。
製品から * を選択してください
WHERE 単価 > ANY
(注文から単価を選択してください
ここで数量 > 100)
キーワード ALL は、サブクエリに一致するすべてのレコードの比較条件を選択するために使用されます。
たとえば、上記の例では、ANY を ALL に変更すると、製品の単価が、数量が 100 を超えるすべての注文よりも高いレコードが返されます。
キーワード IN 述語は、メイン クエリとサブクエリのみに同じ値を含む特定のレコードを取得します。次の例では、25 パーセント以上の割引で販売されたすべての製品が返されます。
キーワード IN は、サブクエリ内のレコードを選択するために使用されます。たとえば、次の例では、注文の数量が 100 を超えるレコードが返されます。
製品から * を選択してください
WHERE 製品コード IN
(注文から製品コードを選択してください
ここで数量 > 100)
対照的に、キーワード NOT IN は、サブクエリに含まれていないレコードを選択するために使用されます。
true/false 比較では、EXISTS キーワードを使用して、サブクエリがレコードを返すかどうかを判断できます。
ASP プログラム rs24.asp など、キーワード ALL の ASP の例は次のとおりです。 [SELECT 名前、件名、スコア From Exam Where subject = '算術' およびスコア >= すべて (SELECT スコア From Exam Where subject = 'arithmetic ' and name =' Zhang San')] Zhang San 以上のスコアを持つ算術テストの算術記録を検索します。
<%
set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
Set rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "試験から名前、科目、スコアを選択します。科目 = '算術' およびスコア >= すべて (科目 = '算術' および名前 = '張三' の場合、試験からスコアを選択します)"
rs2.Open SqlStr,conn1,1,1
Response.Write "<p>すべての得点が Zhang San の算数よりも高かった"
rs2.EOF ではないときに実行します
Response.Write "<BR>" & rs2("名前") & " " & rs2("件名") & " スコア: " & rs2("スコア")
rs2.MoveNext
ループ
rs2.閉じる
%>
上記の ASP プログラム rs24.asp は、クライアント側のブラウザを使用して実行結果を参照し、Zhang San スコア以上の算術テストの算術記録を表示します。
どれでも
キーワード ANY は、サブクエリに一致する任意のレコードの比較条件を選択するために使用されます。たとえば、ASP プログラム rs24.asp は次のようになります。 [SELECT 名前、件名、スコア From Exam Where subject = '算術'、score >=任意 (SELECT スコア From Exam Where Subject='Arithmetic' and Name='Zhang San')] 分数が Zhang San の算術分数以上であるレコードを検索します。
<%
set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
Set rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "試験から名前、科目、スコアを選択します。科目 = '算術' およびスコア >= 任意 (科目 = '算術' および名前 = 'Zhang San' の場合、試験からスコアを選択します)"
rs2.Open SqlStr,conn1,1,1
Response.Write "<p>Zhang San の算術より高い任意の分数"
rs2.EOF ではないときに実行します
Response.Write "<BR>" & rs2("名前") & " " & rs2("件名") & " スコア: " & rs2("スコア")
rs2.MoveNext
ループ
rs2.Close%>
上記の ASP プログラム rs24.asp は、クライアント側のブラウザを使用して実行結果を参照し、Zhang San の算術小数以上のスコアを持つレコードを表示します。
いくつかの
キーワード SOME と ANY は同じ意味を持ち、サブクエリに一致する任意のレコードの比較条件を選択するために使用されます。たとえば、ASP プログラム rs24.asp は次のようになります。 [SELECT Name, Subject, Score From Exam Where Subject]。 = 'Arithmetic' and Score >= Some (SELECT Score From Exam Where Subject='Arithmetic' and Name='Zhang San')] スコアが Zhang San の算術分数以上であるレコードを検索します。
<%
set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
Set rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "試験から名前、科目、スコアを選択します。科目 = '算術' およびスコア >= 一部 (科目 = '算術' および名前 = '張三' の場合、試験からスコアを選択します)"
rs2.Open SqlStr,conn1,1,1
Response.Write "<p>Zhang San の算術よりも高い分数"
rs2.EOF ではないときに実行します
Response.Write "<BR>" & rs2("名前") & " " & rs2("件名") & " スコア: " & rs2("スコア")
rs2.MoveNext
ループ
rs2.閉じる
%>
上記の ASP プログラム rs24.asp は、クライアント側のブラウザを使用して実行結果を参照し、Zhang San の算術小数以上のスコアを持つレコードを表示します。
選択...中
Select...Into は、クエリ結果に基づいて生成されたテーブルを作成します。
構文は次のとおりです。
SELECT フィールド 1[,フィールド 2[, ...]] INTO 新しいテーブル[IN 外部テーブル]
テーブルから
新しいテーブルの名前は、既存のテーブルの名前と同じにすることはできません。同じでない場合、エラーが発生します。
Select...Into によって作成された新しいテーブルのフィールド データ型とサイズは、クエリされたテーブルと同じです。
ASP プログラムでこの SQL コマンドを使用する例を見てみましょう。
たとえば、ASP プログラム rs9.asp は次のとおりです。 [Select * Into Computer From Product Where Type = 'Computer'] は、[Product] テーブル内のすべての [Type] レコードに対して新しい [Computer] テーブルを [Computer] として生成します。 ]:
<%
set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
sql = "カテゴリ = 'コンピューター' の製品から * コンピューターに選択"
a = conn1.Execute(sql) を設定します。
Set rs3 = Server.CreateObject("ADODB.Recordset")
sql = "コンピュータから * を選択"
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("コード名")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("name")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("price")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("quantity")%></TD>
</TR>
<%
rs3.MoveNext
ループ
rs3.閉じる
%>
</テーブル>
上記の ASP プログラム rs9.asp は、クライアント上のブラウザを使用して実行結果を参照し、新しい [Computer] テーブルのレコードを表示します。