[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.030 SQL SELECT文WHERE句を使って条件検索

SQL SELECT文WHERE句を使って条件検索



本文(発行内容)


<SQL SELECT文WHERE句を使って条件検索>

こんにちは、Ken3です。

最近、SQL?しかやってないとお思いのアナタ、
残念ながら今回も、
SELECT文のWHERE句の説明を軽くです。

といっても、たいしたことないのでご安心を。

/*
 * 1.区分を指定してデータを表示したい
*/

データベース名:db029.mdb
テーブル名:KANSOU
フィールド
ID        オートナンバー型
F_KUBUN   テキスト型  ASP,VBA,GUCHI,24Hと4つの区分
F_NO      整数型      0:は全体に対して、1〜はX話にする
F_MEMO    テキスト型  一言メッセージ
WriteTime 日付型      書き込み日付

上記、データベースがあって、
http://www.ken3.org/cgi-bin/test/test029-1.asp
でいままで書き込まれた感想を表示しています。

今まで書き込まれたご意見・感想
日付 区分 NO. 感想 
2003/01/02 20:45:28 24H 全体 ssssss 
2003/01/02 20:45:02 GUCHI 全体 テスト 
2003/01/02 20:45:02 GUCHI 全体 テスト 
2003/01/02 19:19:02 24H 全体 テスト 
2003/01/02 17:33:37 GUCHI 全体 愚痴は聞きたくないよね 
2003/01/02 17:32:51 VBA 全体 チョットなぁ 

24HやGUCHIなど、データが混ざっているので、
今回は、指定したデータのみを表示させる、
早い話が、条件を付けてデータを絞ってみたいと思います。

/*
 * 2.SELECT文のWHERE句
*/

やり方は、すごい簡単で、
SELECT文のWHERE句
を使います。

なんて、いきなり言われても?ですよね。

書き方は、
SELECT 項目名 From テーブル名
 WHERE 条件
とIF文で書いてる条件みたいに普通に書けます。

VBAのデータだけを取りたい時は(言い方を変えるとVBAを条件にデータを抽出)
SELECT * FROM Select * From KANSOU WHERE F_KUBUN = 'VBA'
みたいな感じでOKです。

/*
 * 3.区分を条件にデータを検索する
*/

WHERE句を使ってみたいと思います
固定の処理だとつまらないので、検索条件を?KUBUN=VBAと渡して表示してみます。
http://www.ken3.org/cgi-bin/test/test030-1.asp?KUBUN=VBA
http://www.ken3.org/cgi-bin/test/test030-1.asp?KUBUN=ASP
http://www.ken3.org/cgi-bin/test/test030-1.asp?KUBUN=GUCHI
http://www.ken3.org/cgi-bin/test/test030-1.asp?KUBUN=24H
で、動作するようにします。

-- test030-1.asp
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>SQL SELECT文で WHERE句を使ってみた</title>
</head>
<body>
<h2>SQL SELECT文で WHERE句を使ってみた</h2>
test030-1.asp<br>
<hr>

<%  '頭で、入力パラメーターの文字数をチェックする
  strKUBUN = Request.QueryString("KUBUN")  '変数に代入(気分によって)
  If Len(strKUBUN) = 0 Then
    Response.Write "パラメーターを入力して下さい。<br>" 'エラーメッセージの表示
  Else 'データが入力されていたら、
    'パラメータがあったら、表示の関数を呼ぶ(外側に出したかったので)
    Call TEST_PRINT(strKUBUN)
  End If   'If文もここで終わり
%>

<HR>
終了です。<br>
<A href="test030-1.asp?KUBUN=ASP">test030-1.asp?KUBUN=ASPのデータを確認する</a><br>
<A href="test030-1.asp?KUBUN=24H">test030-1.asp?KUBUN=24Hのデータを確認する</a><br>
<A href="test030-1.asp?KUBUN=VBA">test030-1.asp?KUBUN=VBAのデータを確認する</a><br>
<A href="test030-1.asp?KUBUN=GUCHI">test030-1.asp?KUBUN=GUCHIのデータを確認する</a><br>

</body>
</html>

<% 'パラメータを受け取り、SQLを発行
Sub TEST_PRINT(strKUBUN)

  'ADO DB Connection オブジェクトを作成する、英文そのままじゃん
  Set db=Server.CreateObject("ADODB.Connection")

  '.Provider?プロバイダー?通信会社?じゃなくって
  'データアクセスにはJet.OLEDB.4.0を使うことを設定
  db.Provider = "Microsoft.Jet.OLEDB.4.0"

  '次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す
  db.ConnectionString = Server.MapPath("db029.mdb")

  'やっとデータベースを開ける
  db.open

  'SQL文を作る
  strSQL = "Select * From KANSOU "  '感想(KANSOU)テーブルから全項目(*)セレクト
  strSQL = strSQL & "WHERE F_KUBUN = '" & strKUBUN & "' "  '条件は区分が一致
  strSQL = strSQL & "ORDER BY WriteTime DESC"              '並べ替えは時間の降順

  '中身を確認で表示
  Response.Write "発行するSQL文は[" & strSQL & "]です。<BR>"

  'お約束のレコードセットの作成 SQL文の発行
  Set rs = db.Execute(strSQL)

  'データの表示をテーブルで行う
  Response.Write "<TABLE Border='1'>"

  '見出しをバカっぽく、そのまま書き込む
  Response.Write "<TR>"
  Response.Write "<TD>日付</TD>"
  Response.Write "<TD>区分</TD>"
  Response.Write "<TD>NO.</TD>"
  Response.Write "<TD>感想</TD>"
  Response.Write "</TR>"

  'お約束のEOFまでループは(データが無くなるまでループ)、
  Do While rs.EOF = False   'レコードセットの.EOFがFalseの間
    Response.Write "<TR>"   '内容を表示する、行開始のタグ<TR>
    Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("F_KUBUN") & "</TD>"
    If rs.Fields.Item("F_NO") = 0 Then '0の全体かチェック
      Response.Write "<TD>全体</TD>"
    Else
      Response.Write "<TD>" & rs.Fields.Item("F_NO") & "</TD>" 'NO表示
    End If
    Response.Write "<TD>" & rs.Fields.Item("F_MEMO") & "</TD>"
    Response.Write "</TR>"
    '次のレコードにポインタを移動する
    rs.MoveNext    'これを忘れると悲惨なことに、、、
  Loop

  Response.Write "</TABLE>"  'テーブルは終わりです

  '開いていたレコードセットを閉じる
  rs.Close

  'データベースも閉じようよ
  db.Close

  'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど)
  Set db = Nothing

End Sub
%>

ポイントは特に無いんだけど
^^^^^^^^^^^^^^^^^^^^^^^^^^

<%  '頭で、入力パラメーターの文字数をチェックする
  strKUBUN = Request.QueryString("KUBUN")  '変数に代入(気分によって)
  If Len(strKUBUN) = 0 Then
    Response.Write "パラメーターを入力して下さい。<br>" 'エラーメッセージの表示
  Else 'データが入力されていたら、
    'パラメータがあったら、表示の関数を呼ぶ(外側に出したかったので)
    Call TEST_PRINT(strKUBUN)
  End If   'If文もここで終わり
%>

URLに付けたパラメータを読みたいので、
Request.QueryString("KUBUN")
で、区分を取出してます。

<A href="test030-1.asp?KUBUN=ASP">test030-1.asp?KUBUN=ASPのデータを確認する</a><br>
<A href="test030-1.asp?KUBUN=24H">test030-1.asp?KUBUN=24Hのデータを確認する</a><br>
<A href="test030-1.asp?KUBUN=VBA">test030-1.asp?KUBUN=VBAのデータを確認する</a><br>
<A href="test030-1.asp?KUBUN=GUCHI">test030-1.asp?KUBUN=GUCHIのデータを確認する</a><br>

は、自分自身を違うパラメータで呼んでます。
そんなことも出来るんだなぁ程度に思っててください。

SQL文の作成
^^^^^^^^^^^^^^
ADOの接続関係はバックナンバーを見てもらって、
今回の追加メイン、SQL SELECT文のWHERE句です

  'SQL文を作る
  strSQL = "Select * From KANSOU "  '感想(KANSOU)テーブルから全項目(*)セレクト
  strSQL = strSQL & "WHERE F_KUBUN = '" & strKUBUN & "' "  '条件は区分が一致
  strSQL = strSQL & "ORDER BY WriteTime DESC"              '並べ替えは時間の降順

えっ、こんなんで、、、って言うくらい簡単に、
strSQL = strSQL & "WHERE F_KUBUN = '" & strKUBUN & "' "
で作成してます。
Select * From KANSOU WHERE F_KUBUN = 'ASP' ORDER BY WriteTime DESC
を発行します。
シングルコーテーションで囲っているのは文字列だからで、
数値は、ID = 10 とか、ID > 100なんて書き方です。

あとは、発行したSQLが返したレコードセットを処理してます。

/*
 * 4.終わりの挨拶
*/

今回は、
SQLのSELECT文のWHERE句を使用して、
条件を絞ってみました(データを抽出してみました)

テストは、
http://www.ken3.org/cgi-bin/test/test030-1.asp
で、出来ます。

素朴な疑問あったら、気軽に、
メール、掲示板に書き込んでくださいね。

ASP、VBScript勉強中の三流プログラマーのKen3でした。


ページフッター

ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、

三流君へ メッセージを送る

感想や質問・要望・苦情など 三流君へメッセージを送る。
返信例 XXXXさんへ
下記のフォームからメッセージを送ることができます。


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:


(感想や質問・要望・苦情はHPで記事に載せることがあります。)

種類別のリンク や 広告など

[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


Blogとリンク:[三流君のMemo別館]/ [ASP 三流君のソースコード置き場]/ [Ken3Video YouTubeで動画解説]
広告:

気になった ジャンル ↓を選択してください。

まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。

次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません

広告:



DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く

VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。



[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


広告: