- 締切済み
SQL構文でデータ抽出。
欲しいデータのみを取得するステートメント (1)select カラム名 from テーブル名 where 条件; という構文を本で見つけたのですが… これの条件をテキスト入力に変更して DBから情報を引っ張ってくることは可能でしょうか?? 可能であればその構文を教えていただけますと幸いです。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mitoneko
- ベストアンサー率58% (469/798)
この手の質問の際には、使用するDBMSの他に、プログラム環境も示さないと適切な答えが返せません。例えば、PHPで組むとか、PERLでするとか、.net環境でのアクセスであるとか・・・これによって、構文は全く変わりますから・・・ 一般論で言うと、そのような場合には、2つの方針があります。 一つは、動的SQLと言います。プログラムでSQLを書く時、文字列に、"select **** from **** where ++++"といった感じの値を代入し、これをデータベース側に引き渡す何らかの関数に渡しますよね。この文字列を作成する時に、ユーザーから入力された値を組み込んだ形で作ってやれば良いだけです。 利点は、直裁的で至って簡単。欠点は、DBMSの最適化が効率よく働けなくなること。よほど注意してユーザーから入力された値を検証しないと、SQLインジェクションの可能性がでてくることです。 もう一つは、プリペーアードSQLとか、パラメーターバインドなどと呼ばれる手法です。 これに関しては、構文そのものが周辺環境に完全に依存します。上のような単語で検索してみれば事例は結構調べられると思います。 考え方は、SQL文の中で、ユーザーが入力する部分をパラメータ変数として記述し、SQLを実行する前にパラメータを代入した上でSQLを実行するという手順になります。 利点は、DBMSが最適化を行いやすいこと。パラメータそのものはSQLの一部として解釈されない(又は、システム側でチェック機能が働くため)、SQLインジェクションの可能性が、自分でチェックする時に比べて格段に下がることです。 ちなみに、この次によく出る質問は、ユーザーが指定したカラムだけを出力するように・・・・というパターンです。 これに対しては、前者の動的SQLで対処することになります。 極論は、「ユーザーが入力したSQL文をそのまま実行する」となります。これをやっているのが、DBMSに添付されているコマンドラインユーティリティーですね=^・。・^=
- UmJammer
- ベストアンサー率58% (115/196)
どういうインターフェースを想像しているのかがわかりませんが、例えば条件部分を標準入力から受け付けてSQLを発行するシェルスクリプトを組むとかすれば可能だと思います。
お礼
返事が遅くなってしまいすみません。 私の想像しているインターフェースは HTML画面をScriptで接続というかたちでした。 >条件部分を標準入力から受け付けてSQLを発行するシェルスクリプトを組むとかすれば可能 ご指導ありがとうございます!! その部分を中心に調べてみます。
- sykt1217
- ベストアンサー率34% (277/798)
>これの条件をテキスト入力に変更して >DBから情報を引っ張ってくることは可能でしょうか?? どういう意味でしょう? 「何らかのプログラム上のテキストに入力された内容を、SQL文の条件式にしたい」ということですか? それであれば、答えは「可能です。」 テキストの中身を一度変数に入れてやり、それとSQL構文に突っ込んでやればいいだけです。 ただそのプログラムの言語や環境回りが不明確なため、ロジックで回答を示すことはできません。 それとも違う意味でしょうか? 補足お願いします。
補足
返事が遅くなってしまいすみません。 >どういう意味でしょう? >「何らかのプログラム上のテキストに入力された内容を、SQL文の条件式にしたい」ということですか? HTMLで作った画面にScriptを使って接続しているのですが 友人にSQL構文でもできると言われたので質問させていただきました。 ネット環境ありです。
お礼
>"select **** from **** where ++++" 知らなかったのでためになりました!! 接続できるか試してみます^^。 上記の文章…表現がおかしかったですね^^;。 違う構文だと思ってしまいました。。 訂正します。
補足
返事がおそくなりすみません。 OKwaveを使うことが、初めてだったため、とりあえず質問という形をしてしまいました。 あまり詳しくはないのですが書かせていただきます。 HTML画面をScriptで組みます。 SQL構文を使ってDB検索機能を付ける考えです。 ネット環境はあります。 >"select **** from **** where ++++" 知らなかったのでためになりました!! 接続できるか試してみます^^。 >プリペーアードSQLとか、パラメーターバインドなどと呼ばれる手法 少し高度な感じがしますが、しっかり調べてから利用出来るようでしたら 試させていただきます。