ADO での SELECT 構文 2 の使用
著者:Eve Cole
更新時間:2009-05-30 19:54:35
前回の記事からの続き:
WHERE では、次の BETWEEN、LIKE、および IN 演算子を使用できます。
...との間
Between...And は、式の値が指定された範囲内にあるかどうかを決定します。構文は次のとおりです。
expr value1 と value2 の間
expr の値が value1 と value2 の間にある場合、Between...And 演算子は True を返し、それ以外の場合は False を返すことを示します。
また、論理演算 Not expr Between value1 And value2 を追加して、反対の条件、つまり expr が value1 と value 2 の範囲外にあることを判断することもできます。
expr、value1、または value2 が Null の場合、Between...And は Null 値を返します。
Between...And 演算子ではワイルドカード文字 * を使用できません。たとえば、1000 から 5000 までの製品コード番号を検索するために 100* と 500* を使用することはできません。
のように
一致するキーワードを見つけるのが好きです。
Like の後には、比較する文字列または文字列リテラルをリストする式が続きます。
式で Like 演算子を使用して、フィールド データを文字列式と比較できます。ワイルドカード * を使用して、Like "王*" などの類似したデータを検索できます。クエリはすべてのフィールドで [王] で始まるデータを返します。
Like の後の演算式で使用できる記号:
%: 1 つ以上の文字を表すワイルドカード文字。たとえば、LIKE jack% は jack で始まるすべての文字列リテラルを検索し、LIKE %jack% は jack を含む文字列リテラルを検索します。
_: 1 文字のワイルドカード文字。たとえば、LIKE jack_ は jack1、jacka などの文字列リテラルを検索し、LIKE _jack_ は ajackb、cjackf などの文字列リテラルを検索します。
[xy]: 文字範囲を指定します。たとえば、LIKE [ac]jack は、ajack1、bjack、cjack などの文字列テキストを検索します。
[^xy]: 除外する文字範囲を指定します。たとえば、LIKE [^ac]jack は、ajack1、bjack、cjack などの文字列リテラルを検索しません。
次の例では、文字 A で始まり、その後に B と G の間の任意の文字と数字が続くデータを取得します。
「A[BG]#」のように
で
IN演算式、範囲限定。
構文は次のとおりです。
expr [Not] In(value1, value2,…)
このうち expr は演算式フィールドです。 value1、value2、... は指定された範囲リストです。
たとえば、In 演算子を使用して、学生が住む必要がある都市 (広州、深セン、汕頭) を指定できます。
選択 *
学生から
WHERE CityIn (「広州市」、「深セン市」、「汕頭市」)
この SQL コマンドを使用した ASP プログラムの例を見てみましょう。
IN 句を使用して範囲を決定できます。たとえば、ASP プログラム rs24.asp は次のようになります。 [SELECT 名前、件名、スコア From Exam Where スコア In (SELECT スコア From Exam Where スコア >= 60)] を使用します。 IN でスコアが 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>In: 60 未満のスコアはカウントされません"
rs2.EOF ではないときに実行します
Response.Write "<BR>" & rs2("名前") & " " & rs2("件名") & " スコア: " & rs2("スコア")
rs2.MoveNext
ループ
rs2.閉じる
%>
上記の ASP プログラム rs24.asp は、クライアント側のブラウザを使用して実行結果を参照し、スコアが 60 点以上のレコードを表示します。
入っていない
NOT IN 式は、指定された範囲に属さないことを意味します。
ASP プログラムでこの SQL コマンドを使用する例を見てみましょう。
Not In 句を使用して、表示すべきでないレコードを決定できます。たとえば、ASP プログラム rs24.asp は次のようになります。 [SELECT 名前、件名、スコア From 試験 Where スコア Not In (SELECT スコア From 試験 Where スコア) >= 60)]、IN を使用して、スコアが 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>Not In: 60 を超えるスコアはカウントされません"
rs2.EOF ではないときに実行します
Response.Write "<BR>" & rs2("名前") & " " & rs2("件名") & " スコア: " & rs2("スコア")
rs2.MoveNext
ループ
rs2.閉じる
%>
上記の ASP プログラム rs24.asp については、クライアント側のブラウザを使用して実行結果を参照し、スコアが 60 点以下のレコードを表示します。