- ベストアンサー
SQL文のテーブルについて
テーブル表のいくつかの列と、もう1つテーブル表のいくつかの列を選んで、新しいテーブル表を作るにはどういった文がありますか? よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
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)
単純な方法ですが、以下のような方法はどうでしょうか? ・create_tableコマンドで、新しいテーブルを作成する。 ・insert into 新テーブル名 select ~~ from ~~; と新しいテーブルにデータを投入するsqlを発行する。 あまり、難しく考えないで簡単なコマンドを組み合わせで もできるかと思います。 (注.ユーザサービス中はDBの整合性を考えるとできない コマンドですので、サービス時間外にしてください。) fm0606さんの質問と回答ズレてますか?
- stork
- ベストアンサー率34% (97/285)
再びstorkです。 >そのテーブルの中にはvarchar型とかそういった情報とかはいらないのですか SQLサーバーで確認したところ、もとの列のデータ型が引き継がれるようです。 列名はselect句で使用している列名がそのまま新しいテーブルの列名になります。 その他の製品については、詳しくは分かりませんがほぼ同じだと思います。 >ただ単にテーブルを作ってそのまま上の文で作れるのでしょうか? #3の例はテーブルを作成しますので、あらかじめテーブルを作成する必要はありません。 既にテーブル名が存在する場合は、エラーになるか確認のメッセージが表示されると思います。 既に存在するテーブルに追加する場合は、oribeyakiの回答にあるようにinsert into句を使用します。 oribeyakiさんも書いてらっしゃいますがデータベースは何を使っているんですか?ものによっては製品固有の部分がひっかかるかもしれません。
- stork
- ベストアンサー率34% (97/285)
例をひとつ。 select tableA.col1, tableB.col1 into 新しいテーブル名 form tableA join tableB on tableA.col1 = tabeleB.col1 where tableA = 'XXX' 普通にselect文を作成した後に、fromの前に「into 新しいテーブル名」を入れるだけです。 マウス操作でもっと簡単にできますが、製品ごとの固有の部分になるのでパスします。
補足
質問です。新しいテーブルと書いてあるのですが、そのテーブルの中にはvarchar型とかそういった情報とかはいらないのですか? ただ単にテーブルを作ってそのまま上の文で作れるのでしょうか?
- oribeyaki
- ベストアンサー率45% (18/40)
おはようございます。 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)
SELECT ~ INTO ~ こちら(参考URL)はPostgreSQLのものですが、お使いのDBMSでも使用出来るはずです。
補足
素人なもので、あのホームページではちょっとわかりかねます。 なにか簡単な例文を書いていただけるととてもありがたいです。お願いします。
補足
何度もすみません。 オラクル8iを使っています。 何度もためしているのですが、うまいこといきません。 WHEREの条件にはなにをいれればよいのですか? 前の文ではある元のテーブルの条件一つしか入ってなかったですが・・・。 お手数かけます。