2 つのテーブル コピー ステートメントの詳細な説明: SELECT INTO と INSERT INTO SELECT (SQL データベースと Oracle データベースの違い)

2 つのテーブル コピー ステートメントの詳細な説明: SELECT INTO と INSERT INTO SELECT (SQL データベースと Oracle データベースの違い)

1. INSERT INTO SELECT文

ステートメントの形式は次のとおりです: Insert into Table2(field1,field2,...) select value1,value2,... from Table1

または: Table2に挿入し、Table1から*を選択します

注意: (1) ターゲットテーブル Table2 が存在し、フィールド field、field2... も存在している必要があります。

(2)Table2の主キー制約に注意してください。Table2に主キーがあり、それが空でない場合、field1、field2などに主キーが含まれている必要があります。

(3)構文に注意してください。データを挿入するためのSQLと混同しないように値を追加しないでください。次のように書かないでください。

Table2(field1,field2,...) に値を挿入します (Table1 から value1,value2,... を選択)

ターゲット テーブル Table2 はすでに存在するため、ソース テーブル Table1 のフィールドに加えて定数を挿入できます。次に例を示します。

 --1. テストテーブルを作成する create TABLE Table1 
 ( 
 varchar(10)、 
 b varchar(10)、 
 c varchar(10)
 )
 テーブル Table2 を作成する 
 ( 
 varchar(10)、 
 c varchar(10)、 
 d 整数
 )

 --2. テストデータを作成する Table1 に values('赵','asds','90') を挿入します。 
 Table1に値('money','asds','100')を挿入します 
 Table1に値('孙','asds','80')を挿入します 
 Table1に値('李','asds',null)を挿入します 

 表2から*を選択 

--3. INSERT INTO SELECT文はテーブルデータのいくつかの列と定数値をコピーします。Table2に挿入します(a、c、d)Table1からa、c、5を選択します。

または: Table2に挿入し、Table1から*を選択します

--4. 更新された結果を表示する表2から*を選択する 

 --5. テストテーブルを削除します。drop TABLE Table1 
 テーブルテーブル2をドロップする

2. SELECT INTO FROM ステートメント

ステートメントの形式は次のとおりです: SELECT vale1, value2 into Table2 from Table1

挿入時に Table2 が自動的に作成され、Table1 の指定されたフィールド データが Table2 にコピーされるため、ターゲット テーブル Table2 は存在していてはいけません。次に例を示します。

--1. テストテーブルを作成する create TABLE Table1 
 ( 
 varchar(10)、 
 b varchar(10)、 
 c varchar(10)
 )

 --2. テストデータを作成する Table1 に values('赵','asds','90') を挿入します。 
 Table1に値('money','asds','100')を挿入します 
 Table1に値('孙','asds','80')を挿入します 
 Table1に値('李','asds',null)を挿入します 

 --3.SELECT INTO FROM ステートメントはテーブル Table2 を作成し、データをコピーします。select a,c INTO Table2 from Table1 
 
 --4. 更新された結果を表示する表2から*を選択する 

 --5. テストテーブルを削除します。drop TABLE Table1 
 テーブルテーブル2をドロップする

注意: このステートメントを SQL/Plus または PL/SQL で実行すると、「ORA-00905: キーワードがありません」というエラーが発生します。これは、PL/Sql と T-SQL の違いによるものです。
このステートメントは T-SQL では正常ですが、PL/SQL での説明は次のとおりです。
select..into は PL/SQL 言語の一部であるため、PL/SQL ブロック内で使用する必要があります。PL/SQL 外の SQL ステートメントでは使用できません。
つまり、単一の SQL 文として実行することはできず、通常は PL/SQL プログラム ブロック内で使用されます。

この関数を PL/SQL で実装する場合は、Create table newTable as select * from ... を使用できます。
たとえば、create table NewTable as select * from ATable; です。

NewTable は、キーがないことを除いて ATable と同じです。

---------SQL SELECT INTO 構文の概要
SQL SELECT INTO ステートメントを使用して、テーブルのバックアップ コピーを作成できます。
SELECT INTO ステートメント
SELECT INTO ステートメントは、1 つのテーブルからデータを選択し、そのデータを別のテーブルに挿入します。
SELECT INTO ステートメントは、テーブルのバックアップ コピーを作成したり、レコードをアーカイブしたりするためによく使用されます。
SQL SELECT INTO 構文 すべての列を新しいテーブルに挿入できます。
SELECT * INTO new_table_name [IN externaldatabase] FROM old_table_name
または、必要な列のみを新しいテーブルに挿入します。
SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename
SQL SELECT INTO の例 - バックアップ コピーを作成する 次の例では、「Persons」テーブルのバックアップ コピーを作成します。
SELECT * INTO Persons_backup FROM Persons
IN 句を使用すると、テーブルを別のデータベースにコピーできます。
SELECT * INTO Persons IN 'Backup.mdb' FROM Persons
特定のフィールドをコピーしたい場合は、SELECT ステートメントの後にそれらをリストすることができます。
姓、名を選択
INTO 人物_バックアップ
人物から
SQL SELECT INTO の例 - WHERE 句を使用 WHERE 句を追加することもできます。
次の例では、「Persons」テーブルから「北京」に住む人々に関する情報を抽出して、2 つの列を持つ「Persons_backup」という名前のテーブルを作成します。
SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City='Beijing'
SQL SELECT INTO の例 - 結合されたテーブル 複数のテーブルからデータを選択することもできます。
次の例では、Persons テーブルと Orders テーブルの両方の情報を含む「Persons_Order_Backup」という新しいテーブルを作成します。
SELECT 人物.姓,注文.注文番号
INTO 人物_注文_バックアップ
人物から
INNER JOIN 命令
ON Persons.Id_P=Orders.Id_P

mysql の select into と sql の select into の比較<br /> 現在、student というテーブルがあり、このテーブルのデータを dust という新しいテーブルにコピーしたいと考えています。

回答01:
create table dust select * from student; //コピー前に新しいテーブルdustが作成されていない場合に使用します
回答02:
insert into dust select * from student; //新しいテーブルdustが作成された場合

ここで、select..into.. ステートメントを使用して、上記を実現します。

MySQL は、テーブル構造とデータを直接バックアップするための Select Into ステートメントをサポートしていません。代わりに使用できる方法がいくつかあります。また、使用できる他の方法もいくつかあり、以下にまとめます。

方法1:

MYSQL は以下をサポートしていません:
Select * Into new_table_name from old_table_name; これは、SQL Server での代替の使用方法です。
テーブル new_table_name を作成します (old_table_name から * を選択)。

方法2:

1. まずテーブル構造とデータをバックアップする
#エクスポートコマンド -u ユーザー名 -p パスワード -h ホスト IP アドレス データベース名 テーブル名 1 > エクスポートファイル.sql
mysqldump -uroot -proot -h192.168.0.88 ok_db oktable2 > ok_db.sql

2. バックアップテーブルの名前を変更する
3. MySQLにログインする
4. データベースを選択する
5.実行: バックアップ テーブルのパスを Source d:/ok_db.sql のように入力し、Enter キーを押します。
6. 完了です。

MySQL Select into outfile は、次のように指定されたクエリ データをファイルにエクスポートするために使用されます。

1. 次のように、テーブル内のすべてのデータをドライブ C のルート ディレクトリにある outfile.txt にエクスポートします。
テストから出力ファイル 'c://outfile.txt' に * を選択します。

2. 次のように、テーブル内の指定されたクエリ条件 2005-06-08 のデータを、ドライブ C のルート ディレクトリにある outfile1.txt にエクスポートします。
beginDate='2008-06-08' のテストから、出力ファイル 'c://outfile.txt' に * を選択します。

mysql> ローカル入力ファイル「d:/gpsdata.txt」のデータを、';' で終わる位置データフィールド (userid、latitude、longitude、altitude、speed、innerid、repo) のテーブルにロードします。
rttime、ステータス);

データをロード [LOW_PRIORITY CONCURRENT] [LOCAL] INFILE 'file_name.txt'
[無視して置き換え]
テーブル tbl_name に
[フィールド
['文字列' によって終了]
[[オプション] 'char' で囲む]
['char' によってエスケープされました]
]
[行
['文字列'で始まる]
['文字列' によって終了]
]
[行数を無視]
[(列名またはユーザー変数、...)]
[COL_NAME の設定 = eXPr,...]

フィールドと行は前にあり、(col_name_or_user_var、...) は後ろにあります。使用時に、書き込みたい属性をテーブル名の直後に置くと、これは正しくありません。フィールドと行の後に記述する必要があります。

もう 1 つ追加する点: テーブル A のデータがテーブル B にコピーされる場合、テーブル B には自動増分 ID を設定できません。

自動増分IDがある場合は、自動増分IDを挿入しないでください。

B(タイトル)に挿入 Aからタイトルを選択

以下もご興味があるかもしれません:
  • postgresql 13.1 insert into select の並列クエリの実装
  • Postgresql の insert into select では並列クエリ ソリューションを使用できません
  • MySQL での重複キー更新時の replace into と insert into の使用法と相違点の分析
  • 詳細な説明とサンプルコード付きのphp mysql insert into
  • PHP+MySQL における Insert Into データ挿入の使用法の分析
  • MySQL INSERT INTO ステートメントの正しい使用方法
  • INSERT INTO ステートメントを使用して MySql で複数のレコードを更新する例
  • SQL 挿入文の書き方の説明

<<:  nginxのリソースキャッシュ設定の詳細な説明

>>:  EChartsマウスイベント処理方法の詳細な説明

推薦する

MySQL の中国語文字化け問題の解決方法

1. LinuxのMySQLで中国語の文字化けが発生する。以下の操作を実行する。 vi /etc/m...

複数の値を返す MySQL ストアド プロシージャ メソッドの例

この記事では、例を使用して、MySQL ストアド プロシージャで複数の値を返す方法について説明します...

ウィンドウ環境設定Mysql 5.7.21 windowx64.zip無料インストール版チュートリアル詳細説明

1. 公式サイトのmysqlダウンロードページからmysql-5.7.21-windowx64.zi...

Webフロントエンド開発エンジニアが習得すべきコアスキル

Web フロントエンド開発に含まれる内容は、主に W3C 標準の構造、動作、パフォーマンスです。では...

NginxはLua+Redisを使用してIPを動的にブロックします

1. 背景日常的なウェブサイトのメンテナンスでは、このような要件に頻繁に遭遇します。特定のクローラー...

Reactマウスの複数選択機能の設定方法

一般的に、リストには選択機能があり、単一選択、二重選択、複数選択が非常に一般的です。カスタム ループ...

Vue プロジェクトで TypeScript クラスを適用する方法

目次1. はじめに2. 使用1. @コンポーネント2. 計算、データ、方法3. @props 4. ...

CSS を使用して複数の方法で等高レイアウトを実装するサンプル コード

この記事で説明する等高レイアウトでは、純粋な CSS を使用して、要素の高さを手動で設定することなく...

MySQL セレクトキャッシュメカニズムの使用に関する詳細な説明

MySQL クエリ キャッシュはデフォルトでオンになっています。ある程度、クエリの効果は向上しますが...

bitronix を使用して MySQL に接続するときの MySQLSyntaxErrorException の解決方法

bitronix を使用して MySQL に接続するときの MySQLSyntaxErrorExce...

RHCEはApacheをインストールし、ブラウザでIPにアクセスします

1. at は、5 時間後にルート ディレクトリの at_test ファイルに「これは at タスク...

Web デザイナーにはどのような知識体系が必要ですか?

製品設計者は、複雑で大規模な製造システムと多様な市場に直面しているため、知識体系には幅広さと深さの両...

HTML でよく使われるメタ百科事典 (推奨)

メタタグは、HTML言語のヘッド領域にある補助タグです。HTML文書のヘッダーにあるヘッドタグとタイ...

MySQL で not in を使用して null 値を含める問題を解決する

知らせ! ! ! uid が (a,b,c,null) に含まれないユーザーから * を選択します。...

Linux で毎日データベースの自動バックアップを設定する方法

この記事では、Centos7.6 システムと Oracle11g を例に挙げます。 1. まずデータ...