• ベストアンサー

初めて触るSQL

SQLについてはまったくの初心者なのですが、奮起して始めてみようと考えています。 ひとまずMySQLを導入し、入門書を読みながら付属クライアントで操作して「お~追加できた~」とかやってるレベルなのですが、いくつか確認したいことがあるので教えてください。以下、私の脳内での認識です。 1) SQLは問い合わせの仕様であり、クライアントから見ればぜんぶ同じだが、基本的に各エンジンの持っているデータベースの中身に互換性はない。 2) SQLサーバは、クライアントがなければ意味がなく、運用時には自分で用意しないといけない。 3) MySQL,、PostgreSQLなどのフリーに比べ、商用エンジンは機能が段違いである。 4) MS-AccessはSQLクライアントとして使える。 5) ↑そのためには、自分でコーディングをしなくてはいけない。 6) ODBCとはなんですか?いつ使うと嬉しいんですか? 7) ↑自作ソフトにコレを組み込むとデータベースへのアクセスが容易になる。 8) SQLとは、エンジンに対する質問と応答のインタフェースやフォーマットを定義したものであり、クライアント側のソフトではこれを実装すればよい。 豪快に勘違いしてるかもしれませんが、正誤を含めてよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

こんにちわ。 私の分かる範囲で補足しておきます。 1) SQL はデータベースを操作するための言語仕様でISO 等で   標準化されていますが、各ベンダーによって独自に拡張が   行われています。   従って、あるデータベースで動作するSQL 文が他のデータベース   でそのまま動作する保証はありません。 2) SQLサーバって、データベースのサーバ側の事ですよね。   (MS のSQL Server ではなく) その場合、   クライアント : サーバに対して (SQL文を発行すると言う形で)    処理をリクエストする機能   サーバ : クライアントからのリクエストを受け取って、実際に    処理を行い結果をクライアントに返す機能   と言う感じになります。   従って、どちらか一方だけでは確かに意味を成しません。 3), 4) 正しいと思います。 5) ODBC で接続すれば、特にプログラミングの必要はありません。 6) Open Database Connectivity の略です。   「データベース接続標準」とでも訳せば良いでしょうか?   ODBC はMicrosoft が提唱したデータベースアクセスに関する   仕様で、各データベースベンダーが自社データベースにアクセス   するためのODBC ドライバを提供します。   クライアントアプリケーションがODBC に対応させる事で、   サーバ側のデータベースに依存しないアプリケーションを   作成する事ができます。 7) ODBC を使用する事でデータベースのアクセスが容易になる   と言う事はありません。   ODBC は実行するSQL 文を文字列 (パラメータ) としてODBC   ライブラリを呼び出すようになっていますので、SQL を直接使用   した方が、簡単です。   ODBC のインターフェイスを使用してアプリケーションを作成すれば、   サーバ側のデータベースが変更になった時の対応は容易になります。 8) SQL は、Structured Query Language の略です。   通常は「構造化照会言語」と訳されています。   SQL は、データベースを操作するための言語仕様です。   クライアントは、SQL を使用する事でデータベースを効率的に操作する   事ができます。   

pythian
質問者

お礼

ありがとうございます。プログラム言語をインストールするとき、ODBCを入れます云々というのがありましたが、自作のソフトウェアがODBCに対応することで容易にクエリを発行できる・・・ということなんでしょうか。ここらへんは書籍で勉強したほうが良さそうですね。 いま、Accessからの問い合わせに興味を持っています。よく、店頭レジの在庫管理なんかで検索画面が出ていますが、あぁいうのを設計できるスキルがあればなと思います(これもやっぱり入門書がいいでしょうか(汗)。 もし、タコにもわかる解説ページなどありましたら紹介していただけたら嬉しいです。m(_ _)m

その他の回答 (2)

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.3

こんにちわ。 #1 のmuyoshid です。 > 自作のソフトウェアがODBCに対応することで容易にクエリを > 発行できる・・・ということなんでしょうか。 について補足しておきます。 データベースにアクセスする部分をODBC インターフェイスを使用して 実装したとしても、クエリを発行するのが容易になると言う訳では ありません。 色々ハンドルを獲得しなきゃいけないので、却って面倒です。 ただ、データソースを変更するだけで、別のデータベースをアクセス させる事ができるのがメリットになると思います。 (DDBC から発行しているSQL 文がベンダー独自の機能を使用していない 事が前提となりますが・・・。)

参考URL:
http://homepage1.nifty.com/kojama/works/rdbms/vc.html
  • misoka
  • ベストアンサー率35% (56/160)
回答No.2

No.1のかたがお答えになってらっしゃいますね。 でも、一応わたしも... 2) 「運用時には自分で用意しないといけない」という点が ちょっと違ってる可能性があるかもしれないですね。 たとえば、この「教えて!goo」でもデータベースが 使われているわけですが、運用に際して何かを 「自分で用意」しているかっていうと、そうではない。 たとえば、私はOSとブラウザ以外は用意してないわけで... # 「自分」が指している意味によってくるわけですが。 # 念のため。 クライアントがないと意味ないっていうのは、そのとおり ですね。 3) これについては、どんな機能を基準にするのか にもよってきます。 極端な話、軽さを重視するなら、OracleやSQL Serverより MySQLのほうがよっぽど優秀ってことにもなります。 だから、絶対的に常にいつも間違いなく 商用がいいって考えてしまうと、たまに間違えます。 たまに、ですが。 人によって/価値観によって/用途によって 違ってくる場合もあるわけです。 7) 「データベースへのアクセスが容易になる」という 場合は多いです。 基本的に、そのとおりです。 でも、念のために言うと、 ODBCがその手の唯一のミドルウェアではありませんし、 常に最善の手段とも限りません。 もっと便利なミドルウェアが提供されている場合も ありますし、されていない場合もあります。 念のため。 8) ニュアンスとしての理解は、きっとOKなんでしょうね。 # 言葉の使い方に、ちょっと「?」がある... もっとも、クライアントはSQLだけあればいいって わけじゃないです。その前にサーバと通信して、 コネクションを張ることが必要ですし...。 もしVBなどで実装していくなら、そういう手順も必要に なりますよ。ODBCを使うにせよ、別のものを使うにせよ。 何だか細っかい話ばっかり。 恐縮です。もうやめます。 失礼しました。

pythian
質問者

お礼

いえいえ、参考になりました。ありがとうございます。 なんとなくですが実体が見えてきた気がします。 私の場合はODBCとは何か、から始めないといけませんが・・・(汗

関連するQ&A

  • MYSQLのクライアントについて

    SQLを入門してクライアント側のシステムについてわからない点がパラパラあったので教えて下さい。 クライアント・サーバ型でクライアントが何十人もいる場合、データベース側にはMYSQLをインストールしますが、クライアント側にはODBCとアプリケーションソフトが必要ですよね? また、クライアント側すべてにアプリケーションソフトとしてAccessやExcelがない場合、MYSQLをアプリケーションソフトとして使ってもよいのでしょうか?

  • SQL研修で使うSQLツール

    会社からSQLを新人たちに教えるように言われておりまして、教育環境の構築に悩んでおります。10人、2日間くらいの研修です。 ポイントは、 ・低コストであること。(無料が望ましい) ・SQL方言をなるべく使用しないで行う。 ・グラフィカルなSQL実行ツールは使わず、SQLをガリガリ書かせる。 とりあえず、こんな感じです。 皆それぞれの現場でそれぞれのRDBMSを使っておりますので、なるべく標準(標準ってなんだ?)で行きたいと思っています。 現在は、 ・PostgreSQLを私のマシンにインストールする。 ・各クライアントにPostgreSQLのODBCドライバをインストール かなぁと思っていますが、その先のSQLをガリガリ書くSQLツールは何がいいか迷ってます。ValueSQLというツールが良さそうなんで検討していますが、皆さんなら上記環境をどのように構築しますか?

  • SQLについて

    SQLには Transact-SQL、MySQL、PostgreSQL、PL/SQLといったように種類があります。 使用できる関数が違うとかは分かるのですが、 具体的に何がどう違うかなどははっきり理解できていません。 また、どのSQLをどのような用途で使用するのかなども分かっていません。 また、これに関することで、DBでSQLServerとかOracleとかが関わっていると思われるのですが。 例えば、SQLServerではTransact-SQLを使用して、Oracleでは別のSQL(ここはよく分かっていません)を使用するみたいなことでしょうか? 要はSQLというものがあって、それをコーディングするためのアプリケーションに対応しているものが、各SQLといった事? 例えば、C#、VBA、Java(Transact-SQL、MySQL)などのプログラミング言語(SQL)があって それを使用できるアプリケーションはそれぞれ VisualStudio、Excel、eclipse(SQLServer、Oracle)みたいな意味合いなんでしょうか? よく分からない質問と例えになってしまいましたが、ご回答のほうをよろしくお願いします。

  • あるSQLの書き方についてわからずに困っております。

    あるSQLの書き方についてわからずに困っております。 使っているデータベースはMySQL 4.0.20です。 現在4.0.20を使っておりますが、その時4.1を使っておりましたが 文字化けのバグ?なのか 4.0.20に戻しております。 皆さんはどのバージョンを使っているのでしょうか? OSはWindowsとLinuxです。 val double namae varchar(10) val | namae ----------+---------- 1 | あ 2 | い 2.5 | う 3 | え 4 | お のデータを以下のようにしたいのですが どのようにすれば良いのでしょうか? MySQL/PostgreSQLのどちらでも動作するものが良いです。 1クエリ?では無理でしょうか? val | namae ----------+---------- 1 | あ 2 | い 3 | う 4 | え 5 | お

    • ベストアンサー
    • MySQL
  • Access -> MySql

    AccessからMySqlに接続しようとしているのですが、なかなかうまくいきません。 ODBCでデータソースを作成するところまでは出来ているのですが (TestでもSuccess:connection was mode!とでています) Accessを起動し 「ファイル」->「外部データの取り込み」->「テーブルのリンク」を選択し出てきたダイアログの「ファイルの種類」でODBCデータベースを選択するのですが、「データソースの選択」ダイアログが出てきません。 何に問題があるのでしょうか? Access:Access2003 MySql:5.0.27 ODBC:Mysql Connecter/ODBC 3.51.17 DBサーバ、クライアントともにXPを使用しています。

  • MySQLとPostgreSQLについてのSQLインジェクション

    はじめて質問させていただきます。 よろしくお願いします。 現在、私は大学の研究テーマでデータベース(MySQL、PostgreSQL)を使っているCGIを自作し、それぞれのデータベースについてSQLインジェクションの脆弱性について調べる、という研究を行っています。 ブラインドSQLインジェクションについて調べているのですが、 PostgreSQLの場合、pg_tablesというテーブルにデータベースのテーブル一覧表がのっていて、それを参照することでテーブル名が取得でき、いろいろ悪いことができてしまいますが、MySQLの場合、ブラインドSQLインジェクションを起こそうと思った場合どのようなコマンドを使えばよいのでしょうか? SHOW TABLESで使用中のデータベースのテーブル一覧は取得できますが、それをクエリの一部として使うことはできるのでしょうか・・・? また、全く関係ない質問なのですが、このCGIはRubyで記述して作りました。Rubyにはプリペアドステートメントという機能があるのですが、これをデータベースにアクセスするすべての箇所で用いればSQLインジェクションは100%起きないといえるのでしょうか?(現在考え得る範囲でよいのでお願いします) 卒論で困っているので知っている方がおられましたらどうかよろしくお願いいたします。

  • MacでSQL

    MacでSQL データベースはMSアクセスをメインに使っています。 最近Macを使い始めてMacのデータベースソフト(特にFilemaker)が気になり始めています。 ※仕事でなく個人利用です 質問は以下 (1)MacのデータベースソフトでアクセスのようにSQLを使えるものにはどんなものがありますか? (2)意図するものが見つからない場合は、MySQLを個人利用しようと考えてますが、初めてMySQLを個人利用する時に参考になる本やサイトがあれば教えてください。 なにとぞよろしくお願いします!!

    • 締切済み
    • Mac
  • ODBC(Open DataBase Connectivity)について

    基本的なご質問で申し訳ございません。 ODBCに関する以下の質問に対するご回答をお願い致します。 (1)ODBCドライバは、各データベース(Oracle, MySQL, PostgreSQL等)  ごとに用意されているのでしょうか? (2)ODBCドライバは、クライアント/サーバのどちらの環境で必要と  なるものなのでしょうか? (3)ODBCを使用してデータベースにアクセスするアプリケーションを  作成する場合、使用言語やOSに制限はあるのでしょうか? (ODBCが使用できるのはC言語/Javaアプリ限定? Windowsアプリ限定?)

  • データベースソフトの選定について質問があります(システム開発関係実務未

    データベースソフトの選定について質問があります(システム開発関係実務未経験です) 条件1:お金を出せるのはハードのみ。(それも格安で中古などでもよい) 条件2:所詮、個人経営の事務所に設置するレベル 条件3:サーバはLinux(Cent OSでやりたいと思います)windowsサーバを買う金が出せない 条件4:事務所のクライアント数は所詮、5台程度+サーバ1個(+αするかも) 条件5:クライアント/サーバ型のシステムを構築したい。(WEBアプリではなく) ※あえて何でサーバOSをCentOS(linux)を選ぶ?と聞かれるかもですけど、 答えは、「すべて無償でやる」だからです。 ********************************************************************************* データベースといえば、 ・Oracle (windows用やLinux用) ・SQL Server ・MySQL(PostgreSQL) (windows用やLinux用) ・Access などいろいろありますよね。多種の選択があるデータベースの中で 何を作りたいかで、使う言語やデータベースが違ってくるとは 思いますが、よく企業のシステム開発の実績として目にするのが、 VB.NET+SQL SERVERだったり VC++ +Oracle Java + Oravleだったり っていうクライアント/サーバ型って見るんですけど、 これって目的とするシステムが何を得意としなければいけないとか、 選定された言語とデータベースの相性とかデータベースの 管理がしやすさとか、どこで決めているんですか? 自分が個人事務所レベルでやりたいと思うクライアントサーバ型のシステム内容は 顧客管理や売上げ管理や現場管理など。 Accessで十分じゃね?って言われるかもしれませんが、あえて、言語とデータベースを 学びたいので、「Java + 無料のoracle」みたいなのにしたいです。 クライアント側で動作するものは自分が好きな言語使って サーバ側のデータベースも好きなものを使って。。。という具合に やってはいけないんでしょうか? (Accessはクライアントから同時アクセスされたとき、処理しきれない?ことがある? とか聞くので、これは使わないとして。。。) 具体的には クライアント側で動くプログラム:VB.NETまたはJAVAまたはVC++など サーバ側データベース:MySQL(CentOSもMySQLも無償だから) みたいに、データベースを勝手に無償だからという理由だけでWEBアプリケーション でもないのに、MySQLにするなど、そこでMySQLは使わないでしょ?みたいなのって あるんでしょうか? 以上の条件で、今後独学で何を勉強するしながら独自開発するなら 言語は何がいいかとか、 言語とデータベースの組み合わせはこれでやってみたら?ってのがあれば教えてください。 何もかもクライアント側はJAVA一本でやれば?ってなら、それを頑張ります。 レベルの低い質問かもしれませんが 教えてください。

  • SQL文のエラー

    PostgreSQLの初心者です。よろしくお願いします。 今、日本語ODBCドライバを使ってクライアント側を VB.NETでプログラムを作っています。PostgreSQLは8.1.4です。 レコードの追加をするために、レコードIDのMAX値を 撮るためにプログラム中にSQL sql = "SELECT MAX(user_id) AS MaxID FROM user" を入れて発行したところ、本来ですと「1」が返って こなければいけないのに、 Msgbox(MaxID) を仕込むと「0」が返ってきます。そして、その後に ERROR [HY000] Error while executing the query; ERROR; operator does not exist: # integer というエラーが返ってきます。 先ほどのSQLはリモートで直接PostgreSQLにつなぐと ちゃんと「1」が返ってくるのですが、VB.NET上では うまくいきません。 質問としては2つあります。 1)VB.NET上で実行すると、なぜ「0」が返ってきて しまうのか? 2)エラーメッセージの意味 の2点です。 よろしくお願いします。