• ベストアンサー

SQL文のテーブルについて

テーブル表のいくつかの列と、もう1つテーブル表のいくつかの列を選んで、新しいテーブル表を作るにはどういった文がありますか? よろしくお願いします。

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

  • ベストアンサー
  • cse_ri
  • ベストアンサー率29% (74/253)
回答No.5

Oracleの場合、"create table **** as select ~" を実行すれば、検索結果に従ったテーブルを作成できます。 Oracleのユーザ"scott"で説明します。 ユーザ"scott"で以下のSelect文を実行してください。 [実行SQL文] select dept.deptno, dept.dname, emp.empno, emp.ename from dept, emp where dept.deptno=emp.deptno and dept.deptno=10;  ↓ [実行結果] DEPTNO DNAME EMPNO ENAME ------------------------------------------ 10 ACCOUNTING 7782 CLARK 10 ACCOUNTING 7839 KING 10 ACCOUNTING 7934 MILLER 次に、この検索結果を元に新規にテーブルを作成するSQL文を実行します。 [実行SQL文] create table test1 as select dept.deptno, dept.dname, emp.empno, emp.ename from dept, emp where dept.deptno=emp.deptno and dept.deptno=10; 上記のテーブルの内容を確認します。 [実行SQL文] select * from test1;  ↓ [実行結果] DEPTNO DNAME EMPNO ENAME ------------------------------------------ 10 ACCOUNTING 7782 CLARK 10 ACCOUNTING 7839 KING 10 ACCOUNTING 7934 MILLER

その他の回答 (5)

  • hamanyan
  • ベストアンサー率50% (2/4)
回答No.6

単純な方法ですが、以下のような方法はどうでしょうか? ・create_tableコマンドで、新しいテーブルを作成する。 ・insert into 新テーブル名 select ~~ from ~~; と新しいテーブルにデータを投入するsqlを発行する。 あまり、難しく考えないで簡単なコマンドを組み合わせで もできるかと思います。 (注.ユーザサービス中はDBの整合性を考えるとできない コマンドですので、サービス時間外にしてください。) fm0606さんの質問と回答ズレてますか?

  • stork
  • ベストアンサー率34% (97/285)
回答No.4

再びstorkです。 >そのテーブルの中にはvarchar型とかそういった情報とかはいらないのですか SQLサーバーで確認したところ、もとの列のデータ型が引き継がれるようです。 列名はselect句で使用している列名がそのまま新しいテーブルの列名になります。 その他の製品については、詳しくは分かりませんがほぼ同じだと思います。 >ただ単にテーブルを作ってそのまま上の文で作れるのでしょうか? #3の例はテーブルを作成しますので、あらかじめテーブルを作成する必要はありません。 既にテーブル名が存在する場合は、エラーになるか確認のメッセージが表示されると思います。 既に存在するテーブルに追加する場合は、oribeyakiの回答にあるようにinsert into句を使用します。 oribeyakiさんも書いてらっしゃいますがデータベースは何を使っているんですか?ものによっては製品固有の部分がひっかかるかもしれません。

fm0606
質問者

補足

何度もすみません。 オラクル8iを使っています。 何度もためしているのですが、うまいこといきません。 WHEREの条件にはなにをいれればよいのですか? 前の文ではある元のテーブルの条件一つしか入ってなかったですが・・・。 お手数かけます。

  • stork
  • ベストアンサー率34% (97/285)
回答No.3

例をひとつ。 select tableA.col1, tableB.col1 into 新しいテーブル名 form tableA join tableB on tableA.col1 = tabeleB.col1 where tableA = 'XXX' 普通にselect文を作成した後に、fromの前に「into 新しいテーブル名」を入れるだけです。 マウス操作でもっと簡単にできますが、製品ごとの固有の部分になるのでパスします。

fm0606
質問者

補足

質問です。新しいテーブルと書いてあるのですが、そのテーブルの中にはvarchar型とかそういった情報とかはいらないのですか? ただ単にテーブルを作ってそのまま上の文で作れるのでしょうか?

  • oribeyaki
  • ベストアンサー率45% (18/40)
回答No.2

おはようございます。 DBが記入されてないので、代表的なところでいくつか・・・ Accessの場合 「Select 必要項目 Into 新規テーブル名 From 元テーブル1と元テーブル2のリレーション Where 条件」 の1文でできます。 Oracleの場合 2文になります。 「Create Table 新テーブル(必要項目)」 「Insert Into 新テーブル名 (入力項目) Select 必要項目 From 元テーブル1と元テーブル2のリレーション Where 条件」 こんな感じです。 実表を作る必要が無いのであれば、仮想表(Viewとかクエリー)で対応することも可能です。 また、SQL文といってもDBにより少しづつちがうので、できればDBの種類だけでも書いておいてくださいね。 何かあれば補足してください。

  • natural
  • ベストアンサー率37% (419/1115)
回答No.1

SELECT ~ INTO ~ こちら(参考URL)はPostgreSQLのものですが、お使いのDBMSでも使用出来るはずです。

参考URL:
http://pjam.jpweb.net/pgsql-doc/ej/user/sql-selectinto.htm
fm0606
質問者

補足

素人なもので、あのホームページではちょっとわかりかねます。 なにか簡単な例文を書いていただけるととてもありがたいです。お願いします。

関連するQ&A