• ベストアンサー
  • すぐに回答を!

データベースのテーブルやカラム情報の取得

データベースの定義を取得するSQL文を教えてください。 データベースはAccessとMySQLです。 得たい情報はデータベースにあるテーブルとカラムです。 例えば、テーブルがTblAとTblBがあって、 それぞれに整数型のFld1と文字型のFlb2があるとします。 この定義情報を取得したいのです。 テーブルだけでなくクエリ(ビュー)の定義情報も取得できるでしょうか。

共感・応援の気持ちを伝えよう!

  • MySQL
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
  • 回答No.1
  • yambejp
  • ベストアンサー率51% (3827/7415)

とりあえずMySQLの板なのでMySQLについて 基本構文SHOWをつかい、本件であれば SHOW COLUMNS FROM TblA; のようにして情報をえます。 フィールド名で絞り込みをする場合はLIKEがつかえます。

参考URL:
http://dev.mysql.com/doc/refman/5.1/ja/show-columns.html

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 参考URLも見させていただきました。 まだ、SQL文実行していませんができそうです。

その他の回答 (3)

  • 回答No.4

Accessについては分かりませんが。。。 表定義などの定義情報の管理方式は、各RDBMS毎に異なり、その情報取得方法もSQLで行えたり、特別なコマンドを使ったりと様々です。 そのため、共通の方式で参照できるように標準SQLで規定され、各RDBMSでも実装が進んでいるのが情報スキーマ(information_schema)です。 例えば、表名など、表の基本情報は、 information_schema.tables表 で参照でき、表名は table_name列で参照できます。 表の列名などの列の基本情報は、 information_schema.columns表 で table_name列で条件指定などして参照でき、列名は column_name列で参照できます。 例えば、次のようなSQLで参照できます。 select column_name from information_schema.columns where table_name='t1' order by ・・・ ただ、いくつか注意点があります。 (1)表名、列名などであれば、情報スキーマで同じようなSQLで得られる。 (2)データベース、スキーマなどの概念は、RDBMSにより異なっており、どこにどの情報が入るかは、RDBMS毎に確認する必要がある。 (3)より詳細な情報を得るには、システムカタログなどを参照する必要がある (4)主要なRDBMSでは、情報スキーマはほぼ実装されてきているが、未実装のRDBMSもある。また、情報スキーマで参照できる内容も、各RDBMSの各バージョン毎に順次、拡張されている最中。 などです。 MySQLでは、独自コマンドでdescがありますが、MySQL 5.0で情報スキーマが実装されました。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございました

  • 回答No.3

mysqlですが、「infromation_schema」データベースの「TABLES」「COLUMNS」「VIEWS」あたりから情報を取得できると思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。

  • 回答No.2

Accessについては デザインモードでテーブルを開けばそのような情報がでてくるとおもいます。 一括でとりたいということでしたら、ADOXをつかってVBAでがちがち書けば できますし、そのようなフリーソフトもたくさんあります。 たとえば、 http://www.asahi-net.or.jp/~ef2o-inue/download/sub09_010_070.html クエリに関してはクエリをSQLビューで開けば(括弧だらけですが)SQLが見れます。 (MySQLについては全く知識がありません)

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 デザインモードは解るのですが、テーブルやカラムが多いとき取り出すのが大変なので、レコードデータを操作するInsert文などと同じようなレベルでSQL文がないかと思いました。

関連するQ&A

  • テーブルを結合するとき

    MySQLのSQL文です。 TblAのID、Nmがあり、TblBにID、Adrsがあるとします。 次の2つのSQL文の結果は同じになります。 そもそもこの2つの書き方には何か違う意味があるのでしょうか。 CREATE View TblC1 as SELECT TblA.ID, TblA.Nm, TblB.Adrs FROM TblA INNER JOIN TblB ON TblA.ID = TblB.ID; CREATE View TblC2 as SELECT TblA.ID, TblA.Nm, TblB.Adrs FROM TblA ,TblB where TblA.ID = TblB.ID; また、TblAにはありTblBには含まれないレコードを出すときは CREATE View TblC3 as SELECT TblA.ID, TblA.Nm, TblB.Adrs FROM TblA LEFT JOIN TblB ON TblA.ID = TblB.ID; 逆にTblBにありTblAには含まれないレコードを出すときは CREATE View TblC4 as SELECT TblA.ID, TblA.Nm, TblB.Adrs FROM TblA RIGHT JOIN TblB ON TblA.ID = TblB.ID; としています。 これをwhereを使った書き方ではできないのでしょうか。

    • ベストアンサー
    • MySQL
  • クエリー : テーブル一覧&定義情報取得

    手元にOracleがなく、実際にクエリーを投げて試すこともできず困っています。以下について教えて下さい。 1.Oracleにて、自分で作ったテーブルの名前の一覧を取得するクエリーを教えて下さい。 2.各テーブルにおいて、定義情報(カラム名、カラムサイズetc)を取得するクエリーを教えて下さい。 よろしくお願いします。

  • Accessのクエリ(テーブルの結合)

    Accessのクエリで以下のようなものを作成したいのですが、SQL文がわかりません。 ↓ tblA,tblB,tblC はそれぞれ同じ項目(AAA,Cnt(AAAの値別カウント数)、日付)を持っています。 tblA,tblB,tblC を全部結合して、日付、AAAでグルーピングしたカウントを取りたいのですが、 どのようなクエリ文になるのでしょうか? また、Oracleでいうunion all関数はないのですか? よろしくお願いします。

  • 3つのテーブルを結合させたSQL文について

    3つのテーブルを結合させたSQL文について作成方法を教えてください。 よろしくお願いいたします。 【テーブル構成】 テーブル名---項目名/項目名・・・です。 tblA---id/del_flg/name tblB---id/del_flg/add tblC---id/del_flg/family 各テーブルはidによりリンクされます。 tblAのdel_flgは在籍者=0 退職者=1で、一人1レコードです。 tblBでは住所管理をしています。 旧情報を残したいので、更新時には新たにdel_flg=0でレコードを作成し、既存レコードはdel_flg=1に更新します。 tblCは、既婚者のみ作成されるレコードです。 つまり、tblBとtblCは、レコードが存在しない、あるいはdel_flg=0のみ、del_flg=0とdel_flg=1が混在 のどれかのパターンになります。 【やりたいこと】 いま、これらすべてのテーブルを全部つなげて、在籍している人の情報だけ集めたいのです。 tblAからはdel_flg=0のレコードをすべて取得したうえで、tblBとtblCにdel_flg=0のレコードがあればその情報も取得したい。 【経過】 select * from (tblA inner join tblB on tblA.id = tblB.id ) inner join tblC on tblA.id = tblC.id とりあえずwhere条件をつけなくても、tblCに存在している人しか取得ができないのです。 where条件も含めて、上記条件のもと、希望するようなSQLの組み立て方をご教授ねがいたいのでよろしくお願いいたします。 できれば、早目の回答が希望です。

    • ベストアンサー
    • MySQL
  • カラム情報取得方法

    テーブル内のカラム情報を取得するにはどのようなSQLを作ればよいのでしょうか? 欲しい情報は「カラム名・主キーかどうか・データ型・桁数・NULLを許容かどうか」の5つとなります。 SQL Server は2005と2008を使用していて、どちらでも扱えるSQLがあると助かります。 どうぞ宜しくお願いいたします。

  • mySQL プライマリーキーのカラム名を取得したい

    mySQLで、そのテーブルのプライマリーキーのカラム名を取得する方法を 教えてください。 よろしくお願いします。 http://oshiete1.goo.ne.jp/qa3699289.html のようなSQL文で取得できるのが理想です。

    • ベストアンサー
    • MySQL
  • SQLiteでカラム情報の取得ってできるんですか?

    SQLiteを使ってみようと思い試しているのですが、カラム名と属性情報の 一覧を表示するコマンドが分かりません。 調べてもどうも見つからないので教えていただきたいと思います。 MySQLやOracleなんかでしたら、desc table名; という構文でカラム情報を 取得することができますが、SQLiteではできないようです。 .helpコマンドで調べてみても、テーブル一覧は見つかりますがカラム一覧は出てきません。 ご存知の方教えていただけると助かります。

  • データベース名の取得

    定義したすべてのデータベース名およびカラムを取得するようなSQLはどのようなものでしょうか? 環境はWAMP+Postgres8.0です

  • データベース上の全てのテーブルに対するクエリ

    mySQLでデータベース内の全てのテーブルに対するクエリーに関して質問があります(mySQL 5.5)。 仮に 「ichinensei」というデータベースにテーブル「1_kumi」「2_kumi」「3_kumi」 .....と複数のテーブルがあるとします。 テーブルは全て同じデータ形式で仮に name (char) | weight (int) という名前と体重の情報が登録されているとします。 やりたいことは全てのテーブルに対しweightを検索キーとして該当するレコードのnameをとってくる、という操作です。 weight(体重)が41,42,43,50,51であるレコードの名前を列挙するためには SELECT name FROM (全てのテーブル) WHERE weight IN (41,42,43,50,51) 上記のようなクエリ文が考えられますが(全てのテーブル)に対する検索を1文で済ます方法が分かりません。 実際の作業ではテーブル数が数十個なのでなるべくunionなどを使ってテーブルの数分クエリ文を書くというのは避けたいと考えています。 このような場合どのようなクエリ文が使えるのでしょうか?

    • ベストアンサー
    • MySQL
  • テーブル名をカラムとして取得する方法

    テーブル名をカラムとして取得する方法はありますでしょうか? オラクル8とVB6でプログラムを組んでいます。 例 TABLE Aの内容 カラム1 1 2 3 TABLE B カラム1の内容 4 5 6 SQLは簡略化してかきます。下記のSQLを実行した場合、 select A.カラム1 from A union select b.カラム1 from b 1 2 3 4 5 6 を取得できます。 例えば、上記で、SQL実行後、 下記のような値を取得したいです。 1 ,Aのテーブルだよ 2 ,Aのテーブルだよ 3 ,Aのテーブルだよ 4 ,Bのテーブルだよ 5 ,Bのテーブルだよ 6 ,Bのテーブルだよ それぞれのテーブルの名前を別名で結果に格納したいのです。 何か方法はありますでしょうか? なければ、unionせずに、2回SQLを発行し、それぞれに、 プログラム上で、「Aのテーブルだよ」を後で挿入したいと思っています。