Transact-SQL-データの挿入。 SQLクエリINSERTINTO-データベースに情報を入力しますSQL挿入構文
最終更新日:2017年7月13日
データを追加するには、次の正式な構文を持つINSERTコマンドを使用します。
INSERT table_name [(column_list)] VALUES(value1、value2、... valueN)
最初にINSERTINTO式があり、括弧内にデータを追加する必要があるコンマで区切られた列のリストを指定できます。最後に、VALUESという単語の後に、列に追加される値は次のとおりです。括弧内に記載されています。
たとえば、次のデータベースが以前に作成されたとします。
CREATE DATABASE productsdb; GO USE productsdb; CREATE TABLE製品(Id INT IDENTITY PRIMARY KEY、ProductName NVARCHAR(30)NOT NULL、Manufacturer NVARCHAR(20)NOT NULL、ProductCount INT DEFAULT 0、Price MONEY NOT NULL)
INSERTコマンドを使用して1行追加しましょう。
製品の値を挿入(「iPhone7」、「Apple」、5、52000)
SQL Server Management Studioで正常に実行されると、メッセージフィールドに「1行が影響を受けました」というメッセージが表示されます。
VALUESキーワードの後の括弧内の列の値は、宣言された順序で渡されることに注意してください。 たとえば、上記のCREATE TABLEステートメントでは、最初の列がIdであることがわかります。 ただし、IDENTITY属性が設定されているため、この列の値は自動的に生成され、指定する必要はありません。 2番目の列はProductNameを表すため、最初の値である文字列「iPhone7」がその特定の列に渡されます。 2番目の値は、文字列「Apple」が3番目のManufacturer列に渡されるというように続きます。 つまり、値は次のように列に渡されます:
製品名:「iPhone7」
メーカー:「アップル」
また、値を入力するときに、値が追加される直接の列を指定できます:
INSERT INTO製品(製品名、価格、メーカー)値(「iPhone6S」、41000、「Apple」)
ここでは、値は3列のみに指定されています。 そして今、値は列の順序で渡されます:
製品名:「iPhone6S」
メーカー:「アップル」
指定されていない列(この場合はProductCount)の場合、DEFAULT属性が設定されている場合はデフォルト値が追加されるか、NULLになります。 ただし、指定されていない列はNULL可能またはDEFAULTでなければなりません。
一度に複数の行を追加することもできます。
製品の値に挿入( "iPhone 6"、 "Apple"、3、36000)、( "Galaxy S8"、 "Samsung"、2、46000)、( "Galaxy S8 Plus"、 "Samsung"、1、56000)
この場合、3つの行がテーブルに追加されます。
また、追加するときに、DEFAULTキーワードまたはNULLを使用して、列のデフォルト値を使用するように指定できます。
INSERT INTO Products(ProductName、Manufacturer、ProductCount、Price)VALUES( "Mi6"、 "Xiaomi"、DEFAULT、28000)
この場合、デフォルト値がProductCount列に使用されます(設定されている場合、設定されていない場合はNULL)。
すべての列にデフォルトのDEFAULT属性がある場合、またはnull許容の場合は、すべての列にデフォルト値を挿入できます。
製品のデフォルト値に挿入
ただし、Productsテーブルを取得すると、そのようなコマンドは失敗します。これは、いくつかのフィールドにDEFAULT属性がなく、同時にNULL値を許可しないためです。
このステートメントは、1つ以上のレコードをテーブルに追加します(追加クエリを実行します)。
構文
複数のレコードを追加するリクエスト:
挿入する destination_object [(field1[, field2[, ...]])]
選択する [ ソース.]field1[, field2[, ...]
から table_expression
1つのレコードを追加するリクエスト:
挿入する destination_object [(field1[, field2[, ...]])]
値( field1[, field2[, ...])
INSERT INTOステートメントは、次の要素で構成されています。
部 | 説明 |
---|---|
destination_object |
レコードが追加されるテーブルまたはクエリの名前。 |
field1, field2 |
議論の後 destination_object-データが追加されるフィールドの名前。 議論の後 ソース-データが抽出されるフィールドの名前。 |
external_database |
外部データベースへのパス。 パスの説明については、IN句の記事を参照してください。 |
ソース |
レコードのコピー元のテーブルまたはクエリの名前。 |
table_expression |
レコードを取得するための1つ以上のテーブル名。 この引数には、個々のテーブルの名前、INNER JOIN、LEFT JOIN、またはRIGHT JOINを使用して作成された結果式、または格納されたクエリを指定できます。 |
value1, value2 |
新しいレコードの特定のフィールドに追加される値。 各値は、リスト内のその位置に対応するフィールドに挿入されます。 value1に追加 field1新しいエントリ、 value2-v field2値はコンマで区切り、テキストフィールドは引用符( "")で囲みます。 |
備考
INSERT INTOステートメントを使用すると、上記の構文を使用して1つのレコードをテーブルに追加できます。 この場合、名前と値はレコードの各フィールドに提供されます。 値を割り当てるレコードのすべてのフィールドと対応する値を指定する必要があります。 フィールド値を指定しない場合、デフォルト値またはNULLが割り当てられます。 レコードは表の最後に追加されます。
上記のように、INSERT INTOを使用して、別のテーブルからレコードセットを追加したり、SELECT ... FROM句を使用してクエリを実行したりすることもできます(複数のレコードを追加するための構文を参照)。 この場合、SELECT句は、指定されたフィールドに追加されるフィールドを指定します destination_object.
ソースまた destination_objectテーブルまたはクエリにすることができます。 クエリが指定されている場合、Microsoft Accessデータベースエンジンは、返すすべてのテーブルにレコードを追加します。
INSERTINTOステートメントの使用はオプションです。 指定する場合は、SELECTステートメントの前に置く必要があります。
宛先テーブルに主キーが含まれている場合は、1つ以上の主キーフィールドに追加された値が一意であり、 ヌル; それ以外の場合、エントリは追加されません。
Counterフィールドを持つテーブルにレコードを追加していて、それらに番号を付け直したい場合は、クエリにCounterフィールドを含めないでください。 フィールドの元の値を保持する場合は、クエリにCounterフィールドを含めます。
IN句を使用して、別のデータベースのテーブルにレコードを追加できます。
テーブルを作成するには、SELECT ... INTOステートメントを使用して、テーブルを作成するためのクエリを取得します。
追加クエリを実行する前に、同じ選択基準で選択クエリを使用して、取得した結果に基づいて追加するレコードを決定します。
追加クエリは、1つ以上のテーブルから別のテーブルにレコードをコピーします。 同時に、追加されたレコードを含むテーブルは変更されません。
別のテーブルからレコードを追加する代わりに、VALUES句を使用して、個別の新しいレコードの各フィールドの値を指定できます。 フィールドリストを省略した場合、VALUES句にはテーブルの各フィールドに対応する値を含める必要があります。 そうしないと、INSERT操作は失敗します。 作成する追加のレコードごとに、INSERTINTOステートメントをVALUES句とともに使用します。
SQLステートメントINSERTINTOおよびINSERTSELECTは、テーブルに新しい行を挿入するために使用されます。 命令を使用する2つの方法があります:
- 値のみ:最初の方法は、列名なしで挿入するデータ値のみを指定するためのものです。
構文:
INSERT INTO table_name VALUES(value1、value2、value3、...); table_name:テーブルの名前。 value1、value2、..:新しいレコードの最初の列、2番目の列、...の値
- 列の名前と値:2番目のメソッドは、挿入する列名と行値を指定します:
構文:
INSERT INTO table_name(column1、column2、column3、..)VALUES(value1、value2、value3、...); table_name:テーブルの名前。 column1:最初の列の名前、2番目の列... value1、value2、..:新しいレコードの最初の列、2番目の列、...の値
リクエスト:
方法1( 値のみを挿入する):
Student VALUES( "5"、 "HARSH"、 "WEST BENGAL"、 "8759770477"、 "19");に挿入します。
結果 :
INSERT INTO SELECTを使用すると、Studentテーブルは次のようになります。
ROLL_NO | 名前 | 住所 | 電話 | 年 |
1 | RAM | デリー | 9455123451 | 18 |
2 | RAMESH | グルガオン | 9562431543 | 18 |
3 | SUJIT | ロータク | 9156253131 | 20 |
4 | SURESH | デリー | 9156768971 | 18 |
3 | SUJIT | ロータク | 9156253131 | 20 |
2 | RAMESH | グルガオン | 9562431543 | 18 |
5 | ひどい | 西ベンガル | 8759770477 | 19 |
方法2( 指定された列にのみ値を挿入する):
INSERT INTO Student(ROLL_NO、NAME、Age)VALUES( "5"、 "PRATIK"、 "19");
結果 :
Studentテーブルは次のようになります。
ROLL_NO | 名前 | 住所 | 電話 | 年 |
1 | RAM | デリー | 9455123451 | 18 |
2 | RAMESH | グルガオン | 9562431543 | 18 |
3 | SUJIT | ロータク | 9156253131 | 20 |
4 | SURESH | デリー | 9156768971 | 18 |
3 | SUJIT | ロータク | 9156253131 | 20 |
2 | RAMESH | グルガオン | 9562431543 | 18 |
5 | PRATIK | ヌル | ヌル | 19 |
値のない列はnullに設定されていることに注意してください。
INSERTINTOステートメントでのSELECTの使用
MySQL INSERT SELECTステートメントを使用して、あるテーブルから行をコピーし、それらを別のテーブルに挿入できます。
この演算子を使用することは、INSERTINTOを使用することと同じです。 違いは、SELECTステートメントが別のテーブルからデータをフェッチするために使用されることです。 INSERT INTOSELECTを使用するさまざまな方法は次のとおりです。
- テーブルのすべての列を挿入します:すべてのテーブルデータをコピーして、別のテーブルに貼り付けることができます。
構文:
INSERT INTO first_table SELECT * FROM second_table; first_table:最初のテーブルの名前。 second_table:2番目のテーブルの名前。
SELECTステートメントを使用して1つのテーブルからデータをコピーし、INSERTINTOステートメントを使用して別のテーブルにデータを挿入しました。
- 個々のテーブル列を挿入します..。 別のテーブルに貼り付けるテーブル列のみをコピーできます。
構文:
INSERT INTO first_table(column_names1)SELECT column_names2 FROM second_table; first_table:最初のテーブルの名前。 second_table:2番目のテーブルの名前。 column_names1:テーブル1の場合はコンマ(、)で区切られた列名。column_names2:テーブル2の場合はコンマ(、)で区切られた列名。
SELECTステートメントを使用して2番目のテーブルの選択した列からのみデータをコピーし、MySQL INSERT INTOSELECTステートメントを使用してデータを最初のテーブルに挿入しました。
- テーブルから特定の行をコピーする..。 SELECTステートメントでWHERE句を使用して、後で別のテーブルに挿入するために、テーブルから特定の行をコピーできます。 この場合、WHEREで対応する条件を使用する必要があります。
構文:
表2:LateralStudent
ROLL_NO | 名前 | 住所 | 電話 | 年 |
7 | SOUVIK | DUMDUM | 9876543210 | 18 |
8 | ニラジ | ノイダ | 9786543210 | 19 |
9 | SOMESH | ロータク | 9687543210 | 20 |
リクエスト:
方法1( すべての行と列を挿入します):
INSERT INTO Student SELECT * FROM LateralStudent;
結果 :
このクエリは、LateralStudentテーブルのすべてのデータをStudentテーブルに挿入します。 SQL INSERT INTO SELECTを適用すると、Studentテーブルは次のようになります。
ROLL_NO | 名前 | 住所 | 電話 | 年 |
1 | RAM | デリー | 9455123451 | 18 |
2 | RAMESH | グルガオン | 9562431543 | 18 |
3 | SUJIT | ロータク | 9156253131 | 20 |
4 | SURESH | デリー | 9156768971 | 18 |
3 | SUJIT | ロータク | 9156253131 | 20 |
2 | RAMESH | グルガオン | 9562431543 | 18 |
7 | SOUVIK | DUMDUM | 9876543210 | 18 |
8 | ニラジ | ノイダ | 9786543210 | 19 |
9 | SOMESH | ロータク | 9687543210 | 20 |
方法2( 個々の列を挿入する):
INSERT INTO Student(ROLL_NO、NAME、Age)SELECT ROLL_NO、NAME、Age FROM LateralStudent;
結果 :
このクエリは、LateralStudentテーブルのROLL_NO、NAME、およびAge列のデータをStudentテーブルに挿入します。 Studentテーブルの残りの列はnullに設定されます。 SQL INSERT SELECTを適用すると、テーブルは次のようになります。
ROLL_NO | 名前 | 住所 | 電話 | 年 |
1 | RAM | デリー | 9455123451 | 18 |
2 | RAMESH | グルガオン | 9562431543 | 18 |
3 | SUJIT | ロータク | 9156253131 | 20 |
4 | SURESH | デリー | 9156768971 | 18 |
3 | SUJIT | ロータク | 9156253131 | 20 |
2 | RAMESH | グルガオン | 9562431543 | 18 |
7 | SOUVIK | ヌル | ヌル | 18 |
8 | ニラジ | ヌル | ヌル | 19 |
9 | SOMESH | ヌル | ヌル | 20 |
- 挿入する特定の行の選択:
結果 :
このクエリは、Studentテーブルに挿入するLateralStudentテーブルから最初の行のみを選択します。 INSERT SELECTを適用すると、テーブルは次のようになります。
INSERTステートメントは、新しいレコードをテーブルに挿入します。 この場合、列の値はリテラル定数にすることも、サブクエリの結果にすることもできます。 最初のケースでは、個別のINSERTステートメントを使用して各行を挿入します。 2番目のケースでは、サブクエリによって返されるのと同じ数の行が挿入されます。
演算子の構文は次のとおりです。
| (デフォルト値)
INSERT INTO [(、...)]
(値(、...))
提供されている構文からわかるように、列のリストはオプションです(構文の説明の角括弧で示されています)。 存在しない場合は、挿入された値のリストが完全である必要があります。つまり、テーブルのすべての列に値を指定する必要があります。 ただし、値の順序は、行が挿入されるテーブルのCREATETABLEステートメントで指定された順序と一致する必要があります。 さらに、これらの値は、入力された列と同じデータ型である必要があります。 例として、次のCREATETABLEステートメントによって作成されたProductテーブルに行を挿入することを検討してください。
CREATETABLE製品
maker char(1)NOT NULL、
モデルvarchar(4)NOT NULL、
タイプvarchar(7)NOT NULL
このテーブルにメーカーBのモデルPC1157を追加するとします。これは、次の演算子を使用して実行できます。
製品に挿入
値( "B"、1157、 "PC");
列のリストを指定すると、次の「自然な」順序を変更できます。
INSERT INTO製品(タイプ、モデル、メーカー)
値( "PC"、1157、 "B");
これは完全に冗長な機能であるように思われますが、これは設計をより面倒にするだけです。 ただし、列にデフォルト値がある場合は勝ちます。 次のテーブル構造を検討してください。
CREATE TABLE product_D
maker char(1)NULL、
モデルvarchar(4)NULL、
タイプvarchar(7)NOT NULL DEFAULT "PC"
ここでは、すべての列の値にデフォルト値があることに注意してください(最初の2つはNULLで、最後の列はタイプ-PCです)。 今、私たちは書くことができます:
INSERT INTO Product_D(モデル、メーカー)
値(1157、 "B");
この場合、行を挿入するときに、欠落している値がデフォルト値のPCに置き換えられます。 CREATE TABLEステートメントの列にデフォルト値が指定されておらず、特定のテーブル列でのNULLの使用を禁止するNOT NULL制約が指定されていない場合、デフォルト値のNULLが想定されることに注意してください。
問題が発生します。列のリストを指定せずに、デフォルト値を使用することは可能ですか? 答えはイエスです。 これを行うには、値を明示的に指定する代わりに、デフォルトの予約語を使用します。
Product_Dに挿入
値( "B"、1158、デフォルト);
すべての列にデフォルト値があるため、デフォルト値で行を挿入するように書き込むことができます。
Product_Dに挿入
値(DEFAULT、DEFAULT、DEFAULT);
ただし、この場合、特別なDEFAULT VALUES構造(演算子の構文を参照)があり、これを使用して上記の演算子を次のように書き換えることができます。
Product_Dのデフォルト値に挿入します。
テーブルに行を挿入すると、このテーブルに課せられたすべての制限がチェックされることに注意してください。 これらは、主キーまたは一意のインデックス制約、CHECKなどのチェック制約、および参照整合性制約にすることができます。 いずれかの制約に違反した場合、行の挿入は拒否されます。 次に、サブクエリのユースケースを見てみましょう。 パーソナルコンピュータのモデル(タイプ=「PC」)に関連するProductテーブルのすべての行をProduct_Dテーブルに挿入する必要があるとします。 必要な値はすでにいくつかのテーブルにあるため、手動で挿入された行を形成することは、第一に効果がなく、第二に、入力エラーを引き起こす可能性があります。 サブクエリを使用すると、次の問題が解決します。
この場合、列の順序は両方のテーブルで同じであるため、サブクエリでの「*」記号の使用は正当化されます。 そうでない場合は、列のリストをINSERTステートメント、サブクエリ、またはその両方で適用する必要があります。これは、列の順序と一致します。
ここで、以前と同様に、既存のデフォルト値を使用する場合は、すべての列を指定できるわけではありません。次に例を示します。
この場合、デフォルトのPC値は、挿入されたすべての行のProduct_Dテーブルのtype列に置き換えられます。
述語を含むサブクエリを使用する場合、述語値がTRUE(UNKNOWN!ではない)の行のみが挿入されることに注意してください。 つまり、Productテーブルのtype列がNULL可能であり、その値が複数の行に存在する場合、それらの行はProduct_Dテーブルに挿入されません。
VALUES句で行コンストラクタを使用するときにINSERTステートメントに単一の行を挿入するという制限を克服するために、UNIONALL句で行を形成するサブクエリを人為的に使用できます。 したがって、1つのINSERTステートメントを使用して複数の行を挿入する必要がある場合は、次のように記述できます。
Product_Dに挿入
SELECT "B" ASメーカー、1158 ASモデル、 "PC" ASタイプ
UNION ALL
SELECT "C"、2190、 "ラップトップ"
UNION ALL
SELECT "D"、3219、 "プリンター";
重複する文字列が保証されていない場合でも、UNION ALLを使用することをお勧めします。これにより、重複するチェックが実行されなくなります。
文字列コンストラクタを使用した複数のタプルの挿入は、すでに実装されていることに注意してください。 Microsoft Corporationによって開発されたリレーショナルデータベース管理システム(DBMS)。構造化照会言語)は、リレーショナルデータベースのデータを作成、変更、および管理するために使用されるユニバーサルコンピューター言語です。 SQLサーバー 2008.この機会を考慮して、最後のクエリは次のように書き直すことができます。
Product_D値に挿入
( "B"、1158、 "PC")、
( "C"、2190、 "ラップトップ")、
INSERT INTOとは何ですか?
データベースシステムの主な目的は、データをテーブルに格納することです。 データは通常、データベース上で実行されるアプリケーションプログラムによって提供されます。 そのために、SQLにはデータをテーブルに格納するために使用されるINSERTコマンドがあります。 NS INSERTコマンドは新しい行を作成しますデータを格納するためにテーブルに。基本構文
以下に示すSQLINSERTコマンドの基本的な構文を見てみましょう。
INSERT INTO `table_name`(column_1、column_2、...)VALUES(value_1、value_2、...);
- INSERT INTO `table_name``table_name`という名前のテーブルに新しい行を追加するようにMySQLサーバーに指示するコマンドです。
- (column_1、column_2、...)新しい行で更新する列を指定します
- VALUES(value_1、value_2、...)新しい行に追加される値を指定します
新しいテーブルに挿入するデータ値を指定するときは、さまざまなデータ型を処理する際に次のことを考慮する必要があります。
- 文字列データ型-すべての文字列値は一重引用符で囲む必要があります。
- 数値データ型-すべての数値は、一重引用符または二重引用符で囲まずに直接指定する必要があります。
- 日付データ型-日付の値を「YYYY-MM-DD」の形式で一重引用符で囲みます。
例:
データベースに追加する必要のある新しいライブラリメンバーの次のリストがあるとします。
フルネーム | 生年月日 | 性別 | 実在住所 | 住所 | 連絡先番号 | 電子メールアドレス |
---|---|---|---|---|---|---|
レナード・ホフスタッター | 男 | ウッドクレスト | 0845738767 | |||
シェルドン・クーパー | 男 | ウッドクレスト | 0976736763 | |||
ラジェッシュ・クースラパリ | 男 | フェアビュー | 0938867763 | |||
レスリー・ウィンクル | 14/02/1984 | 男 | 0987636553 | |||
ハワード・ウォロウィッツ | 24/08/1981 | 男 | サウスパーク | P.O. ボックス4563 | 0987786553 |
「データを1つずつ挿入します。LeonardHofstadterから始めます。連絡先番号を数値データ型として扱い、番号を一重引用符で囲みません。
INSERT INTO `members`(` full_names`、 `gender`、` physical_address`、 `contact_number`)VALUES(" Leonard Hofstadter "、" Male "、" Woodcrest "、0845738767);
上記のスクリプトを実行すると、Leonardの連絡先番号から0が削除されます。これは、値が数値として扱われ、重要ではないため、最初のゼロ(0)が削除されるためです。
このような問題を回避するには、以下に示すように、値を一重引用符で囲む必要があります-
INSERT INTO `members`(` full_names`、 `gender`、` physical_address`、 `contact_number`)VALUES(" Sheldon Cooper "、" Male "、" Woodcrest "、" 0976736763 ");
上記の場合、ゼロ(0)は削除されません
正しい値が正しい列にマップされている限り、列の順序を変更してもINSERTクエリには影響しません。
以下に示すクエリは、上記の点を示しています。
INSERT INTO `members`(` contact_number`、 `gender`、` full_names`、 `physical_address`)VALUES(" 0938867763 "、" Male "、" Rajesh Koothrappali "、" Woodcrest ");
上記のクエリは、生年月日列をスキップしました。 デフォルトでは、MySQLはINSERTクエリでスキップされる列にNULL値を挿入します。
ここで、生年月日が指定されているレスリーのレコードを挿入しましょう。 日付値は、「YYYY-MM-DD」の形式を使用して一重引用符で囲む必要があります。
INSERT INTO `members`(` full_names`、 `date_of_birth`、` gender`、 `physical_address`、` contact_number`)VALUES( "Leslie Winkle"、 "1984-02-14"、 "Male"、 "Woodcrest"、 " 0987636553 ");
上記のクエリはすべて、列を指定し、挿入ステートメントの値にマップしました。 テーブル内のすべての列に値を指定している場合は、挿入クエリから列を省略できます。
INSERT INTO `members` VALUES(9、" Howard Wolowitz "、" Male "、" 1981-08-24 "、" SouthPark "、" P.O. Box 4563 "、" 0987786553 "、" lwolowitzemail.me ");
ここで、「SELECTステートメントを使用して、membersテーブルのすべての行を表示します。SELECT* FROM`members`;
会員番号 | full_names | 性別 | 生年月日 | 実在住所 | postal_address | contct_number | Eメール |
---|---|---|---|---|---|---|---|
1 | ジャネット・ジョーンズ | 女性 | 21-07-1980 | ファーストストリートプロットNo4 | プライベートバッグ | 0759 253 542 | このメールアドレスはスパムボットから保護されています。 表示するにはJavaScriptを有効にする必要があります。 |
2 | ジャネット・スミス・ジョーンズ | 女性 | 23-06-1980 | メルローズ123 | ヌル | ヌル | このメールアドレスはスパムボットから保護されています。 表示するにはJavaScriptを有効にする必要があります。 |
3 | ロバート・フィル | 男 | 12-07-1989 | サードストリート34 | ヌル | 12345 | このメールアドレスはスパムボットから保護されています。 表示するにはJavaScriptを有効にする必要があります。 |
4 | グロリアウィリアムズ | 女性 | 14-02-1984 | セカンドストリート23 | ヌル | ヌル | ヌル |
5 | レナード・ホフスタッター | 男 | ヌル | ウッドクレスト | ヌル | 845738767 | ヌル |
6 | シェルドン・クーパー | 男 | ヌル | ウッドクレスト | ヌル | 976736763 | ヌル |
7 | ラジェッシュ・クースラパリ | 男 | ヌル | ウッドクレスト | ヌル | 938867763 | ヌル |
8 | レスリー・ウィンクル | 男 | 14-02-1984 | ウッドクレスト | ヌル | 987636553 | ヌル |
9 | ハワード・ウォロウィッツ | 男 | 24-08-1981 | サウスパーク | P.O. ボックス4563 | 987786553 | このメールアドレスはスパムボットから保護されています。 表示するにはJavaScriptを有効にする必要があります。 |
Leonard Hofstadterの連絡先番号が、連絡先番号からゼロ(0)を削除していることに注意してください。 他の連絡先番号は最初にゼロ(0)を落としていません。
別のテーブルからテーブルに挿入する
INSERTコマンドを使用して、別のテーブルからテーブルにデータを挿入することもできます。 基本的な構文は次のとおりです。
INSERT INTO table_1 SELECT * FROM table_2;
「実際の例を見てみましょう。デモンストレーション用に映画カテゴリのダミーテーブルを作成します。新しいカテゴリテーブルcategories_archiveを呼び出します。次のスクリプトでテーブルを作成します。
CREATE TABLE `categories_archive`(` category_id` int(11)AUTO_INCREMENT、 `category_name` varchar(150)DEFAULT NULL、` remarks` varchar(500)DEFAULT NULL、PRIMARY KEY( `category_id`))
上記のスクリプトを実行して、テーブルを作成します。
次に、カテゴリテーブルのすべての行をカテゴリアーカイブテーブルに挿入します。以下に示すスクリプトは、これを実現するのに役立ちます。
INSERT INTO `categories_archive` SELECT * FROM`categories`;
上記のスクリプトを実行すると、categoriesテーブルのすべての行がcategoriesアーカイブテーブルに挿入されます。 スクリプトが機能するには、テーブル構造が同じである必要があることに注意してください。 より堅牢なスクリプトは、挿入テーブルの列名をデータを含むテーブルの列名にマップするスクリプトです。
以下に示すクエリは、その使用法を示しています。
INSERT INTO `categories_archive`(category_id、category_name、remarks)SELECT category_id、category_name、remarks FROM` category`;
SELECTクエリの実行
SELECT * FROM `categories_archive`
以下に示す結果が得られます。
category_id | 種別名 | 備考 |
---|---|---|
1 | コメディ | ユーモアのある映画 |
2 | ロマンチック | ラブストーリー |
3 | すごい | ストーリーacient映画 |
4 | ホラー | ヌル |
5 | SF | ヌル |
6 | スリラー | ヌル |
7 | アクション | ヌル |
8 | ラブコメ | ヌル |
9 | 漫画 | ヌル |
10 | 漫画 | ヌル |
概要
- INSERTコマンドは、新しいデータをテーブルに追加するために使用されます
- 日付と文字列の値は一重引用符で囲む必要があります。
- 数値を引用符で囲む必要はありません。
- INSERTコマンドを使用して、あるテーブルから別のテーブルにデータを挿入することもできます。