6

制約*キー* などに関して、これらの違いは何ですか。

ステートメントに選択

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7

ステートメントに挿入

INSERT INTO table1 ( column1, column2, someInt, someVarChar )
SELECT  table2.column1, table2.column2,
FROM    table2
WHERE   table2.ID = 7

そしてまた

Create table ramm as select * from rammayan

編集1:

データベース SQL Server 2008

4

7 に答える 7

10

ここでは MySQL を想定しています。

ドキュメントに記載されているように、最初の 2 つは同一です。

3 番目のステートメントでは、テーブルの作成作成の両方が可能ですが、構文が間違っています。詳細については、正しい構文を参照してください。

アップデート

それはSQL Server = pです

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7

ItemBack1最初のステートメントは、に基づいてテーブルを自動的に作成しますtable2

INSERT INTO table1 ( column1, column2, someInt, someVarChar )
SELECT  table2.column1, table2.column2,
FROM    table2
WHERE   table2.ID = 7

2 番目の 2 番目のステートメントでは、table1既に存在する必要があります。

参照: http://blog.sqlauthority.com/2007/08/15/sql-server-insert-data-from-one-table-to-another-table-insert-into-select-select-into-table /


制約に違いがある場合は、2 番目のステートメントが既に作成したもの (およびテーブルにデータが入力されているかどうかなど) に依存するためです。

ところで、3 番目のステートメントは Oracle(tm) であり、最初のステートメントと同じです。

于 2012-05-17T07:10:44.980 に答える
6

SELECTINTOとINSERTの間にはいくつかの非常に重要な違いがあります。

まず、INSERTの場合、宛先テーブルを事前に定義する必要があります。SELECT INTOは、ステートメントの一部としてテーブルを作成します。

次に、最初の条件の結果として、INSERTを使用してテーブルにロードするときに型変換エラーが発生する可能性があります。これは、SELECT INTOでは発生しません(ただし、基になるクエリでエラーが発生する可能性があります)。

第三に、SELECT INTOでは、すべての列に名前を付ける必要があります。INSERTを使用すると、名前を付ける必要はありません。

第4に、SELECT INTOは、処理中にメタデータの一部をロックします。これは、データベース上の他のクエリがテーブルへのアクセスからロックアウトされる可能性があることを意味します。たとえば、このロックのために、同じデータベースで2つのSELECTINTOステートメントを同時に実行することはできません。

第5に、非常に大きな挿入では、INSERTでは進行状況を確認できますが、SELECTINTOでは進行状況を確認できない場合があります。少なくとも、これは私の経験です。

複雑なクエリがあり、データをテーブルに入れたい場合、私はよく次のように使用します。

SELECT top 0 *
INTO <table>
FROM <query>

INSERT INTO <table>
    SELECT * FROM <query>
于 2012-05-17T11:25:10.950 に答える
4

Select Into -> select の実行時にその場でテーブルを作成します

その間

挿入先 -> テーブル DB が既に存在することを前提としています

最後に

作成、クエリの戻り結果からテーブルを作成するだけです

于 2012-05-17T07:21:35.390 に答える
2

あなたの質問がよくわかりません。やってみよう:

最初のものは、列「someVarChar」の値を「ItemBack1」という変数に選択します。SQL サーバー (mysql/oracle/mssql/etc.) に応じて、この変数を使用していくつかのロジックを実行できるようになりました。

2番目のものはの結果を挿入します

SELECT  table2.column1, table2.column2, 8, 'some string etc.'
FROM    table2
WHERE   table2.ID = 7

table1 に (コピー)

そして 3 番目は、テーブル「rammayan」のコピーとして新しいテーブル「ramm」を作成します。

于 2012-05-17T07:10:22.723 に答える
1

一般的に言えば 、それぞれに独自の特徴があり、1 つは一時テーブルを作成し、もう 1 つは以前に存在したテーブルを使用し、3 番目はまったく同じ構造とフォーマットで新しいテーブルを作成します。

SELECT…INTO は、既定のファイル グループに新しいテーブルを作成し、クエリの結果の行をそこに挿入します。

INSERT INTO: 既存のテーブルを埋める INSERT...INTO

3 番目のオプションは、CTAS (Create Table As Select) として知られています。検索を行うと、便利なリンクがたくさん表示されます。基本的には、一時テーブルではなく、SELECT ステートメントで使用される構造と型を使用してテーブルを作成します。

もっとリンクを追加したかったのですが、私は新しいユーザーなので、スパムを防ぐために 2 つのリンクしか投稿できません。

于 2012-05-17T08:37:23.600 に答える