ADO での SELECT 構文 4 の使用
著者:Eve Cole
更新時間:2009-05-30 19:54:28
持っている
HAVING は、GROUP BY によってカウントされたレコードをフィルター処理するために SELECT 式で使用されます。 GROUP BY がレコードをカウントした後、HAVING は HAVING 句の条件に一致するレコードをフィルターします。
構文は次のとおりです。
SELECT フィールドリスト
テーブルから
WHERE 選択基準
GROUP BY グループフィールドリスト
[グループ基準を持つ]
.groupcriteria は、どれをフィルタリングする必要があるかを決定する統計レコードを示します。
HAVING は WHERE に似ており、どのレコードを選択するかを決定するために使用されます。 GROUP BY を使用してレコードをカウントする場合、HAVING によって表示されるレコードが決定されます。次に例を示します。
製品名を選択してください
製品から
カテゴリごとにグループ化
単価が 1000 を超える
HAVING 句には最大 40 個の演算式を含めることができ、演算式は AND や OR などの論理演算子で接続されます。
ASP プログラムでこの SQL コマンドを使用する例を見てみましょう。
HAVING 句を使用して、表示するレコードを決定できます。たとえば、ASP プログラム rs23.asp は次のようになります。 [SELECT Name, Subject, Avg (Score) As Average From Exam Group By Name, Subject Have Avg ( Score) >=60]、Having Avg(score) >=60 を使用して、平均スコアが 60 ポイント以上のレコードを検索します。
<%
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 = "名前、被験者、平均 (スコア) を名前別の試験グループから平均として選択し、平均 (スコア) >= 60 の被験者"
rs2.Open SqlStr,conn1,1,1
Response.Write "<p>平均(スコア) >=60"
rs2.EOF ではないときに実行します
Response.Write "<BR>" & rs2("名前") & " " & rs2("件名") & " 平均: " & rs2("平均")
rs2.MoveNext
ループ
rs2.閉じる
%>
上記の ASP プログラム rs23.asp は、クライアントのブラウザを使用して実行結果を参照し、平均スコアが 60 点以上のレコードを表示します。
HAVING 句を使用して重複レコードを検索することもできます。たとえば、ASP プログラム rs23.asp は次のようになります。 [SELECT Code From Product Group By Code Have Count (Code) > 1] を使用するには、Having Count (Code) > 1 を使用します。重複したコードレコードを見つけるには:
<%
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 = "Count(code) > 1 を持つコードにより製品グループからコードを選択"
rs2.Open SqlStr,conn1,1,1
Response.Write "<p>Count(code) > 1 を持つ重複を検索"
rs2.EOF ではないときに実行します
Response.Write "<BR>" & rs2("コード名")
rs2.MoveNext
ループ
rs2.閉じる
%>
上記の ASP プログラム rs23.asp については、クライアント側のブラウザを使用して実行結果を参照し、コード名が重複するレコードを表示します。
連合
Union は、複数のクエリセットの結果を結合できます。
構文は次のとおりです。
クエリ 1 UNION [ALL] クエリ 2 [UNION [ALL] クエリ 3 [ ... ]]
クエリは SELECT 式です。
UNION 操作を使用すると、重複したレコードは返されません。すべてのレコードを返したい場合は、UNION の後に ALL を追加すると、クエリがより速く実行されます。
UNION 操作内のすべてのクエリには、同じ数のフィールドが必要です。フィールドのサイズは異なる場合があり、フィールドのデータ型も異なる場合があります。
エイリアスは最初の SELECT 式でのみ使用でき、他の SELECT 式では省略されます。
各 SELECT 式で GROUP BY または HAVING 句を使用して、クエリの結果をカウントできます。
最後の SELECT 式で ORDER BY 句を使用すると、クエリ結果を並べ替える順序を指定できます。
ASP プログラムでこの SQL コマンドを使用する例を見てみましょう。
Union を使用すると、2 セットのクエリの結果をマージできます。たとえば、ASP プログラム rs25.asp は次のようになります。 [(SELECT name, subject,得点 From Exam Where subject='arithmetic' and name='Li Si' ) Union (SELECT 名、件名、スコア) 試験の Where subject='arithmetic' and name='Zhang San')] から、Union を使用して 2 セットの SELECT クエリの結果をマージし、1 つのグループは算術スコア レコードをクエリします。もう 1 つは、Li Si の算術得点記録をクエリすることです。
<%
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 = "(SELECT 名前、件名、スコアFrom 試験 Where subject='算術' および name='Li Si') Union (SELECT 名前、件名、スコアFrom 試験 Where subject='算術' および name='Zhang San') "
rs2.Open SqlStr,conn1,1,1
応答。「<p>Union」と書き込みます。
rs2.EOF ではないときに実行します
Response.Write "<BR>" & rs2("名前") & " " & rs2("件名") & " スコア: " & rs2("スコア")
rs2.MoveNext
ループ
rs2.閉じる
%>
上記の ASP プログラム rs25.asp は、クライアント上のブラウザを使用して実行結果を参照し、John Doe と John Doe の算術分数レコードを表示します。