คอมพิวเตอร์ Windows อินเทอร์เน็ต

Transact-SQL - การแทรกข้อมูล แบบสอบถาม SQL INSERT INTO - เติมฐานข้อมูลด้วยข้อมูล SQL แทรกไวยากรณ์

ปรับปรุงล่าสุด: 07/13/2017

ในการเพิ่มข้อมูล จะใช้คำสั่ง INSERT ซึ่งมีรูปแบบดังนี้:

INSERT table_name [(column_list)] ค่า (value1, value2, ... valueN)

ที่จุดเริ่มต้นมีนิพจน์ INSERT INTO จากนั้นในวงเล็บคุณสามารถระบุรายการคอลัมน์ที่คั่นด้วยเครื่องหมายจุลภาคที่คุณต้องการเพิ่มข้อมูลและในตอนท้ายหลังจากคำว่า VALUES ค่าที่เพิ่มสำหรับคอลัมน์คือ ระบุไว้ในวงเล็บ

ตัวอย่างเช่น สมมติว่าฐานข้อมูลต่อไปนี้ถูกสร้างขึ้นก่อนหน้านี้:

สร้างฐานข้อมูล productsdb; ใช้ productsdb; สร้างผลิตภัณฑ์ตาราง (รหัสหลัก INT IDENTITY, ProductName NVARCHAR (30) ไม่ใช่ NULL, ผู้ผลิต NVARCHAR (20) ไม่ใช่ NULL, ProductCount INT DEFAULT 0, ราคา MONEY NOT NULL)

ให้เพิ่มหนึ่งบรรทัดโดยใช้คำสั่ง INSERT:

ใส่ค่าผลิตภัณฑ์ ("iPhone 7", "Apple", 5, 52000)

หลังจากดำเนินการสำเร็จใน SQL Server Management Studio ข้อความ "1 แถวที่ได้รับผลกระทบ" ควรปรากฏในฟิลด์ข้อความ:

โปรดทราบว่าค่าสำหรับคอลัมน์ในวงเล็บหลังจากส่งผ่านคีย์เวิร์ด VALUES ตามลำดับที่มีการประกาศ ตัวอย่างเช่น ในคำสั่ง CREATE TABLE ด้านบน คุณจะเห็นว่าคอลัมน์แรกคือ Id แต่เนื่องจากมีการตั้งค่าแอตทริบิวต์ IDENTITY ไว้ ค่าของคอลัมน์นี้จะถูกสร้างขึ้นโดยอัตโนมัติ และคุณไม่จำเป็นต้องระบุ คอลัมน์ที่สองแสดงถึง ProductName ดังนั้นค่าแรก สตริง "iPhone 7" จะถูกส่งต่อไปยังคอลัมน์นั้น ค่าที่สองคือสตริง "Apple" จะถูกส่งต่อไปยังคอลัมน์ผู้ผลิตที่สาม เป็นต้น นั่นคือค่าจะถูกส่งต่อไปยังคอลัมน์ดังต่อไปนี้:

    ชื่อสินค้า: "iPhone 7"

    ผู้ผลิต: "แอปเปิ้ล"

นอกจากนี้ เมื่อป้อนค่า คุณสามารถระบุคอลัมน์ที่จะเพิ่มค่าได้ทันที:

INSERT INTO ผลิตภัณฑ์ (ProductName, Price, ผู้ผลิต) VALUES ("iPhone 6S", 41000, "Apple")

ที่นี่ ค่าถูกระบุสำหรับสามคอลัมน์เท่านั้น และตอนนี้ค่าจะถูกส่งต่อในลำดับของคอลัมน์:

    ชื่อสินค้า: "iPhone 6S"

    ผู้ผลิต: "แอปเปิ้ล"

สำหรับคอลัมน์ที่ไม่ระบุ (ในกรณีนี้ ProductCount) ค่าเริ่มต้นจะถูกเพิ่มหากมีการตั้งค่าแอตทริบิวต์ DEFAULT หรือ NULL อย่างไรก็ตาม คอลัมน์ที่ไม่ระบุต้องเป็นค่าว่างหรือเป็นค่าเริ่มต้น

นอกจากนี้เรายังสามารถเพิ่มหลายบรรทัดพร้อมกัน:

ใส่ค่าผลิตภัณฑ์ ("iPhone 6", "Apple", 3, 36000), ("Galaxy S8", "Samsung", 2, 46000), ("Galaxy S8 Plus", "Samsung", 1, 56000)

ในกรณีนี้ จะมีการเพิ่มสามแถวลงในตาราง

นอกจากนี้ เมื่อเพิ่ม เราสามารถระบุได้ว่าจะใช้ค่าเริ่มต้นสำหรับคอลัมน์โดยใช้คีย์เวิร์ด DEFAULT หรือ NULL:

INSERT INTO ผลิตภัณฑ์ (ProductName, ผู้ผลิต, ProductCount, Price) VALUES ("Mi6", "Xiaomi", DEFAULT, 28000)

ในกรณีนี้ ค่าเริ่มต้นจะถูกใช้สำหรับคอลัมน์ ProductCount (หากตั้งค่าไว้ หากไม่ใช่ จะเป็น NULL)

หากคอลัมน์ทั้งหมดมีแอตทริบิวต์ DEFAULT เริ่มต้น หรือเป็นค่าว่าง คุณสามารถแทรกค่าเริ่มต้นสำหรับคอลัมน์ทั้งหมดได้:

INSERT INTO ค่าเริ่มต้นของผลิตภัณฑ์

แต่ถ้าคุณใช้ตารางผลิตภัณฑ์ คำสั่งดังกล่าวจะล้มเหลว เนื่องจากหลายฟิลด์ไม่มีแอตทริบิวต์ DEFAULT และไม่อนุญาตให้มีค่า NULL ในเวลาเดียวกัน

คำสั่งนี้เพิ่มอย่างน้อยหนึ่งระเบียนลงในตาราง (ดำเนินการแบบสอบถามแบบผนวก)

ไวยากรณ์

ขอเพิ่มหลายระเบียน:

ใส่ลงใน ปลายทาง_object [(field1[, field2[, ...]])]
เลือก [ แหล่งที่มา.]field1[, field2[, ...]
จาก table_expression

ขอเพิ่มหนึ่งระเบียน:

ใส่ลงใน ปลายทาง_object [(field1[, field2[, ...]])]
ค่านิยม ( field1[, field2[, ...])

คำสั่ง INSERT INTO ประกอบด้วยองค์ประกอบต่อไปนี้:

ส่วนหนึ่ง

คำอธิบาย

ปลายทาง_object

ชื่อของตารางหรือคิวรีที่จะเพิ่มระเบียน

field1, field2

หลังจากการโต้เถียง ปลายทาง_object- ชื่อของฟิลด์ที่เพิ่มข้อมูล; หลังจากการโต้เถียง แหล่งที่มา- ชื่อของฟิลด์ที่ดึงข้อมูล

ฐานข้อมูลภายนอก

เส้นทางไปยังฐานข้อมูลภายนอก สำหรับคำอธิบายของพาธ โปรดดูบทความ IN clause

แหล่งที่มา

ชื่อของตารางหรือคิวรีที่คัดลอกเรกคอร์ด

table_expression

ชื่อตารางอย่างน้อยหนึ่งชื่อที่จะดึงข้อมูลระเบียน อาร์กิวเมนต์นี้สามารถเป็นชื่อของตารางแต่ละรายการ นิพจน์ผลลัพธ์ที่สร้างโดยใช้ INNER JOIN, LEFT JOIN หรือ RIGHT JOIN หรือคิวรีที่เก็บไว้

มูลค่า1, ค่า2

ค่าที่จะเพิ่มลงในฟิลด์เฉพาะในเรกคอร์ดใหม่ แต่ละค่าจะถูกแทรกลงในฟิลด์ที่สอดคล้องกับตำแหน่งในรายการ: มูลค่า1เพิ่มไปยัง field1รายการใหม่, ค่า2- วี field2เป็นต้น คั่นค่าด้วยเครื่องหมายจุลภาคและใส่ฟิลด์ข้อความในเครื่องหมายคำพูด ("")

หมายเหตุ

ด้วยคำสั่ง INSERT INTO คุณสามารถเพิ่มระเบียนเดียวลงในตารางโดยใช้ไวยากรณ์ข้างต้น ในกรณีนี้ จะมีการระบุชื่อและค่าสำหรับแต่ละฟิลด์ในเรกคอร์ด คุณต้องระบุฟิลด์ทั้งหมดของเรกคอร์ดที่คุณกำหนดค่าและค่าที่เกี่ยวข้อง หากคุณไม่ระบุค่าฟิลด์ ค่านั้นจะถูกกำหนดเป็นค่าเริ่มต้นหรือ NULL เร็กคอร์ดจะถูกผนวกเข้ากับส่วนท้ายของตาราง

คุณยังสามารถใช้ INSERT INTO เพื่อเพิ่มชุดระเบียนจากตารางหรือคิวรีอื่นโดยใช้คำสั่ง SELECT ... FROM ดังที่แสดงด้านบน (ดูไวยากรณ์สำหรับคิวรีเพื่อเพิ่มหลายระเบียน) ในกรณีนี้ คำสั่ง SELECT จะระบุฟิลด์ที่จะเพิ่มไปยังฟิลด์ที่ระบุ ปลายทาง_object.

แหล่งที่มาหรือ ปลายทาง_objectสามารถเป็นตารางหรือแบบสอบถาม ถ้ามีการระบุคิวรี Microsoft Access Database Engine จะเพิ่มระเบียนลงในตารางทั้งหมดที่ส่งคืน

การใช้คำสั่ง INSERT INTO เป็นทางเลือก หากระบุไว้ จะต้องอยู่ก่อนคำสั่ง SELECT

หากตารางปลายทางมีคีย์หลัก ตรวจสอบให้แน่ใจว่าค่าที่เพิ่มลงในฟิลด์คีย์หลักอย่างน้อยหนึ่งรายการไม่ซ้ำกันและแตกต่างจาก โมฆะ; มิฉะนั้นจะไม่มีการเพิ่มรายการ

หากคุณกำลังเพิ่มระเบียนลงในตารางที่มีเขตข้อมูลตัวนับ และคุณต้องการกำหนดหมายเลขใหม่ อย่ารวมเขตข้อมูลตัวนับในแบบสอบถามของคุณ รวมฟิลด์ตัวนับในคิวรีของคุณหากคุณต้องการเก็บค่าดั้งเดิมจากฟิลด์

คุณสามารถเพิ่มระเบียนลงในตารางในฐานข้อมูลอื่นโดยใช้คำสั่ง IN

ในการสร้างตาราง ให้ใช้คำสั่ง SELECT ... INTO เพื่อรับคิวรีเพื่อสร้างตาราง

ก่อนเรียกใช้การเพิ่มคิวรี ให้ใช้คิวรีแบบใช้เลือกข้อมูลที่มีเกณฑ์การเลือกเดียวกันเพื่อกำหนดว่าเรกคอร์ดใดจะถูกเพิ่มตามผลลัพธ์ที่ได้รับ

ผนวกบันทึกการคัดลอกคิวรีจากตารางอย่างน้อยหนึ่งตารางไปยังอีกตารางหนึ่ง ในเวลาเดียวกัน ตารางที่มีระเบียนที่เพิ่มไว้จะไม่เปลี่ยนแปลง

แทนที่จะเพิ่มระเบียนจากตารางอื่น คุณสามารถระบุค่าของแต่ละเขตข้อมูลในระเบียนใหม่แยกกันโดยใช้ส่วนคำสั่ง VALUES หากละเว้นรายการฟิลด์ ส่วนคำสั่ง VALUES จะต้องรวมค่าที่สอดคล้องกันสำหรับแต่ละฟิลด์ในตาราง มิฉะนั้น การดำเนินการ INSERT จะล้มเหลว ใช้คำสั่ง INSERT INTO พร้อมกับส่วนคำสั่ง VALUES สำหรับแต่ละระเบียนเพิ่มเติมที่คุณต้องการสร้าง

คำสั่ง SQL INSERT INTO และ INSERT SELECT ใช้เพื่อแทรกแถวใหม่ลงในตาราง มีสองวิธีในการใช้คำแนะนำ:

  1. ค่าเท่านั้น: วิธีแรกใช้สำหรับระบุเฉพาะค่าข้อมูลที่จะแทรกโดยไม่มีชื่อคอลัมน์

ไวยากรณ์:

INSERT INTO table_name ค่า (value1, value2, value3, ...); table_name: ชื่อของตาราง value1,value2, ..: ค่าของคอลัมน์แรก, คอลัมน์ที่สอง, ... สำหรับบันทึกใหม่

  1. ชื่อคอลัมน์และค่า: วิธีที่สองระบุชื่อคอลัมน์และค่าแถวที่จะแทรก:

ไวยากรณ์:

INSERT INTO table_name (column1, column2, column3, ..) VALUES (value1, value2, value3, ...); table_name: ชื่อของตาราง column1: ชื่อคอลัมน์แรก, คอลัมน์ที่สอง ... value1, value2, ..: ค่าของคอลัมน์แรก, คอลัมน์ที่สอง, ... สำหรับบันทึกใหม่

คำขอ:

วิธีที่ 1 ( ใส่เฉพาะค่า):

แทรกลงในค่านิยมของนักเรียน ("5", "รุนแรง", "เบงกอลตะวันตก", "8759770477", "19");

ผลลัพธ์ :

หลังจากใช้ INSERT INTO SELECT ตารางนักเรียนจะมีลักษณะดังนี้:

ROLL_NO ชื่อ ที่อยู่ โทรศัพท์ อายุ
1 แกะ เดลี 9455123451 18
2 ราเมช คุร์เคาน์ 9562431543 18
3 สุจิตต์ ROHTAK 9156253131 20
4 SURESH เดลี 9156768971 18
3 สุจิตต์ ROHTAK 9156253131 20
2 ราเมช คุร์เคาน์ 9562431543 18
5 รุนแรง เบงกอลตะวันตก 8759770477 19

วิธีที่ 2 ( การแทรกค่าลงในคอลัมน์ที่ระบุเท่านั้น):

INSERT INTO นักเรียน (ROLL_NO, NAME, อายุ) VALUES ("5", "PRATIK", "19");

ผลลัพธ์ :

ตารางนักเรียนจะมีลักษณะดังนี้:

ROLL_NO ชื่อ ที่อยู่ โทรศัพท์ อายุ
1 แกะ เดลี 9455123451 18
2 ราเมช คุร์เคาน์ 9562431543 18
3 สุจิตต์ ROHTAK 9156253131 20
4 SURESH เดลี 9156768971 18
3 สุจิตต์ ROHTAK 9156253131 20
2 ราเมช คุร์เคาน์ 9562431543 18
5 ประติกร โมฆะ โมฆะ 19

โปรดทราบว่าคอลัมน์ที่ไม่มีค่าจะถูกตั้งค่าเป็น null

การใช้ SELECT ในคำสั่ง INSERT INTO

คุณสามารถใช้คำสั่ง MySQL INSERT SELECT เพื่อคัดลอกแถวจากตารางหนึ่งและแทรกลงในตารางอื่น

การใช้ตัวดำเนินการนี้เหมือนกับการใช้ INSERT INTO ข้อแตกต่างคือคำสั่ง SELECT ใช้เพื่อดึงข้อมูลจากตารางอื่น ต่อไปนี้เป็นวิธีต่างๆ ในการใช้ INSERT INTO SELECT:

  • แทรกทุกคอลัมน์ของตาราง: คุณสามารถคัดลอกข้อมูลตารางทั้งหมดแล้ววางลงในตารางอื่นได้

ไวยากรณ์:

INSERT INTO first_table SELECT * จาก second_table; first_table: ชื่อของตารางแรก Second_table: ชื่อของตารางที่สอง

เราใช้คำสั่ง SELECT เพื่อคัดลอกข้อมูลจากตารางหนึ่งและคำสั่ง INSERT INTO เพื่อแทรกลงในอีกตารางหนึ่ง

  • แทรกแต่ละคอลัมน์ของตาราง... คุณสามารถคัดลอกเฉพาะคอลัมน์ตารางที่คุณต้องการวางลงในตารางอื่น

ไวยากรณ์:

INSERT INTO first_table (column_names1) เลือก column_names2 จาก second_table; first_table: ชื่อของตารางแรก Second_table: ชื่อของตารางที่สอง column_names1: ชื่อคอลัมน์ที่คั่นด้วยเครื่องหมายจุลภาค (,) สำหรับตาราง 1.column_names2: ชื่อคอลัมน์ที่คั่นด้วยเครื่องหมายจุลภาค (,) สำหรับตารางที่ 2

เราใช้คำสั่ง SELECT เพื่อคัดลอกข้อมูลจากคอลัมน์ที่เลือกของตารางที่สองเท่านั้น และคำสั่ง MySQL INSERT INTO SELECT เพื่อแทรกลงในตารางแรก

  • คัดลอกเฉพาะแถวจากตาราง... คุณสามารถคัดลอกแถวที่ระบุจากตารางเพื่อแทรกลงในตารางอื่นในภายหลังได้โดยใช้ส่วนคำสั่ง WHERE ที่มีคำสั่ง SELECT ในกรณีนี้ คุณต้องใช้เงื่อนไขที่เกี่ยวข้องใน WHERE

ไวยากรณ์:

ตารางที่ 2: ข้างนักเรียน

ROLL_NO ชื่อ ที่อยู่ โทรศัพท์ อายุ
7 ซูวิค ดัมดุม 9876543210 18
8 นิรัช นอยดา 9786543210 19
9 โซเมช ROHTAK 9687543210 20

คำขอ:

วิธีที่ 1 ( แทรกแถวและคอลัมน์ทั้งหมด):

INSERT INTO นักเรียน SELECT * จาก LateralStudent;

ผลลัพธ์ :

แบบสอบถามนี้จะแทรกข้อมูลทั้งหมดจากตาราง LateralStudent ลงในตารางนักเรียน หลังจากใช้ SQL INSERT INTO SELECT ตารางนักเรียนจะมีลักษณะดังนี้:

ROLL_NO ชื่อ ที่อยู่ โทรศัพท์ อายุ
1 แกะ เดลี 9455123451 18
2 ราเมช คุร์เคาน์ 9562431543 18
3 สุจิตต์ ROHTAK 9156253131 20
4 SURESH เดลี 9156768971 18
3 สุจิตต์ ROHTAK 9156253131 20
2 ราเมช คุร์เคาน์ 9562431543 18
7 ซูวิค ดัมดุม 9876543210 18
8 นิรัช นอยดา 9786543210 19
9 โซเมช ROHTAK 9687543210 20

วิธีที่ 2 ( การแทรกแต่ละคอลัมน์):

INSERT INTO นักเรียน (ROLL_NO, NAME, อายุ) SELECT ROLL_NO, NAME, อายุ FROM LateralStudent;

ผลลัพธ์ :

แบบสอบถามนี้จะแทรกข้อมูลจากคอลัมน์ ROLL_NO, NAME และอายุของตาราง LateralStudent ลงในตารางนักเรียน คอลัมน์ที่เหลือในตาราง Student จะถูกตั้งค่าเป็น null หลังจากใช้ SQL INSERT SELECT ตารางจะมีลักษณะดังนี้:

ROLL_NO ชื่อ ที่อยู่ โทรศัพท์ อายุ
1 แกะ เดลี 9455123451 18
2 ราเมช คุร์เคาน์ 9562431543 18
3 สุจิตต์ ROHTAK 9156253131 20
4 SURESH เดลี 9156768971 18
3 สุจิตต์ ROHTAK 9156253131 20
2 ราเมช คุร์เคาน์ 9562431543 18
7 ซูวิค โมฆะ โมฆะ 18
8 นิรัช โมฆะ โมฆะ 19
9 โซเมช โมฆะ โมฆะ 20
  • การเลือกแถวเฉพาะสำหรับการแทรก:

ผลลัพธ์ :

แบบสอบถามนี้จะเลือกเฉพาะแถวแรกจากตาราง LateralStudent เพื่อแทรกลงในตารางนักเรียน หลังจากใช้ INSERT SELECT ตารางจะเป็นแบบนี้

คำสั่ง INSERT แทรกระเบียนใหม่ลงในตาราง ในกรณีนี้ ค่าของคอลัมน์อาจเป็นค่าคงที่ตามตัวอักษร หรือเป็นผลจากเคียวรีย่อยก็ได้ ในกรณีแรก คำสั่ง INSERT แยกกันถูกใช้เพื่อแทรกแต่ละแถว ในกรณีที่สอง จะมีการแทรกแถวมากที่สุดเท่าที่จะส่งกลับโดยแบบสอบถามย่อย

ไวยากรณ์สำหรับตัวดำเนินการมีดังนี้:

    ใส่ลงใน [(, ...)]

    (ค่า (, ...))

  1. | (ค่าเริ่มต้น)

ดังที่คุณเห็นจากไวยากรณ์ที่มีให้ รายการคอลัมน์เป็นทางเลือก (ตามที่ระบุโดยวงเล็บเหลี่ยมในคำอธิบายไวยากรณ์) หากไม่มีรายการค่าที่แทรกจะต้องสมบูรณ์ กล่าวคือ ระบุค่าสำหรับคอลัมน์ทั้งหมดของตาราง อย่างไรก็ตาม ลำดับของค่าต้องตรงกับลำดับที่ระบุโดยคำสั่ง CREATE TABLE สำหรับตารางที่แทรกแถว นอกจากนี้ ค่าเหล่านี้จะต้องเป็นประเภทข้อมูลเดียวกับคอลัมน์ที่ป้อน ตัวอย่างเช่น ลองแทรกแถวลงในตารางผลิตภัณฑ์ที่สร้างโดยคำสั่ง CREATE TABLE ต่อไปนี้:

    สร้างผลิตภัณฑ์ตาราง

    ถ่านชง (1) ไม่เป็นโมฆะ

    รุ่น varchar (4) ไม่ NULL

    พิมพ์ varchar (7) ไม่ NULL

สมมติว่าคุณต้องการเพิ่มไปยังตารางรุ่น PC 1157 จากผู้ผลิต B ซึ่งสามารถทำได้ด้วยตัวดำเนินการต่อไปนี้:

    INSERT INTO สินค้า

    ค่านิยม ("B", 1157, "PC");

หากคุณระบุรายการคอลัมน์ คุณสามารถเปลี่ยนลำดับ "ธรรมชาติ" ดังต่อไปนี้:

    INSERT INTO สินค้า (ชนิด รุ่น ผู้ผลิต)

    ค่านิยม ("PC", 1157, "B");

ดูเหมือนว่านี่เป็นคุณสมบัติที่ซ้ำซ้อนโดยสิ้นเชิง ซึ่งทำให้การออกแบบยุ่งยากมากขึ้นเท่านั้น อย่างไรก็ตาม จะชนะหากคอลัมน์มีค่าเริ่มต้น พิจารณาโครงสร้างตารางต่อไปนี้:

    สร้างตาราง product_D

    ผู้ผลิตถ่าน (1) NULL,

    รุ่น varchar (4) NULL

    พิมพ์ varchar (7) ไม่ใช่ค่าเริ่มต้น "PC"

โปรดทราบว่าที่นี่ค่าของคอลัมน์ทั้งหมดมีค่าเริ่มต้น (สองตัวแรกคือ NULL และคอลัมน์สุดท้ายคือประเภท - PC) ตอนนี้เราสามารถเขียน:

    INSERT INTO Product_D (รุ่น ผู้ผลิต)

    ค่า (1157, "B");

ในกรณีนี้ ค่าที่หายไปจะถูกแทนที่ด้วยค่าเริ่มต้น PC เมื่อแทรกแถว โปรดทราบว่าหากไม่ได้ระบุค่าเริ่มต้นสำหรับคอลัมน์ในคำสั่ง CREATE TABLE และไม่ได้ระบุข้อจำกัด NOT NULL เพื่อห้ามการใช้ NULL ในคอลัมน์ตารางที่กำหนด ระบบจะถือว่าค่าเริ่มต้นเป็น NULL

คำถามเกิดขึ้น: เป็นไปได้ไหมที่จะไม่ระบุรายการคอลัมน์และใช้ค่าเริ่มต้น? คำตอบคือใช่ เมื่อต้องการทำสิ่งนี้ แทนที่จะระบุค่าอย่างชัดเจน ให้ใช้คำสงวน DEFAULT:

    INSERT INTO Product_D

    ค่า ("B", 1158, ค่าเริ่มต้น);

เนื่องจากคอลัมน์ทั้งหมดมีค่าเริ่มต้น เราสามารถเขียนเพื่อแทรกแถวด้วยค่าเริ่มต้น:

    INSERT INTO Product_D

    ค่า (ค่าเริ่มต้น ค่าเริ่มต้น ค่าเริ่มต้น);

อย่างไรก็ตาม สำหรับกรณีนี้มีโครงสร้างค่าเริ่มต้นพิเศษ (ดูไวยากรณ์ตัวดำเนินการ) ซึ่งตัวดำเนินการข้างต้นสามารถเขียนใหม่เป็น

    INSERT INTO Product_D ค่าเริ่มต้น;

โปรดทราบว่าเมื่อแทรกแถวลงในตาราง ข้อจำกัดทั้งหมดที่กำหนดไว้ในตารางนี้จะถูกตรวจสอบ สิ่งเหล่านี้อาจเป็นคีย์หลักหรือข้อจำกัดดัชนีเฉพาะ ข้อจำกัดการตรวจสอบ เช่น การตรวจสอบ และข้อจำกัดด้านความสมบูรณ์ของการอ้างอิง หากมีการละเมิดข้อจำกัด การแทรกแถวจะถูกปฏิเสธ ทีนี้มาดูกรณีการใช้งานสำหรับเคียวรีย่อยกัน สมมติว่าเราจำเป็นต้องแทรกลงในตาราง Product_D ทุกแถวจากตารางผลิตภัณฑ์ที่เกี่ยวข้องกับรุ่นของคอมพิวเตอร์ส่วนบุคคล (ประเภท = 'PC') เนื่องจากค่าที่เราต้องการมีอยู่แล้วในบางตาราง การก่อตัวของแถวที่แทรกด้วยตนเอง ประการแรก ไม่ได้ผล และประการที่สอง อาจทำให้เกิดข้อผิดพลาดในการป้อนข้อมูลได้ การใช้แบบสอบถามย่อยแก้ปัญหาเหล่านี้:

ในกรณีนี้ การใช้สัญลักษณ์ "*" ในแบบสอบถามย่อยนั้นสมเหตุสมผล เนื่องจากลำดับของคอลัมน์จะเหมือนกันสำหรับทั้งสองตาราง หากไม่เป็นเช่นนั้น จะต้องใช้รายการคอลัมน์ในคำสั่ง INSERT ในเคียวรีย่อย หรือทั้งสองอย่าง ซึ่งจะตรงกับลำดับของคอลัมน์:

เช่นเดียวกับเมื่อก่อน คุณสามารถระบุคอลัมน์บางคอลัมน์ได้หากคุณต้องการใช้ค่าเริ่มต้นที่มีอยู่ ตัวอย่างเช่น

ในกรณีนี้ ค่า PC เริ่มต้นสำหรับแถวที่แทรกทั้งหมดจะถูกแทนที่ลงในคอลัมน์ประเภทของตาราง Product_D

โปรดทราบว่าเมื่อใช้เคียวรีย่อยที่มีเพรดิเคต เฉพาะแถวที่ค่าเพรดิเคตเป็น TRUE (ไม่ใช่ UNKNOWN!) เท่านั้นที่จะถูกแทรก กล่าวอีกนัยหนึ่ง หากคอลัมน์ประเภทในตารางผลิตภัณฑ์เป็นค่าว่างได้ และค่านั้นมีอยู่ในหลายแถว แถวเหล่านั้นจะไม่ถูกแทรกลงในตาราง Product_D

เพื่อเอาชนะข้อจำกัดของการแทรกแถวเดียวในคำสั่ง INSERT เมื่อใช้ตัวสร้างแถวในอนุประโยค VALUES สามารถใช้เทคนิคเทียมของการใช้แบบสอบถามย่อยที่สร้างแถวที่มีอนุประโยค UNION ALL ได้ ดังนั้นหากเราต้องการแทรกหลายแถวโดยใช้คำสั่ง INSERT เดียว เราสามารถเขียนได้ดังนี้

    INSERT INTO Product_D

    SELECT "B" AS maker, รุ่น 1158 AS, "PC" AS type

    ยูเนี่ยน ALL

    เลือก "C", 2190, "แล็ปท็อป"

    ยูเนี่ยน ALL

    เลือก "D", 3219, "เครื่องพิมพ์";

การใช้ UNION ALL ดีกว่า UNION แม้ว่าจะไม่มีการรับประกันสตริงที่ซ้ำกัน เนื่องจากจะไม่มีการตรวจสอบซ้ำ

ควรสังเกตว่าการแทรก tuples หลายตัวโดยใช้ตัวสร้างสตริงมีการใช้งานแล้วใน ระบบการจัดการฐานข้อมูลเชิงสัมพันธ์ (DBMS) ที่พัฒนาโดย Microsoft CorporationStructured Query Language) เป็นภาษาคอมพิวเตอร์สากลที่ใช้ในการสร้าง แก้ไข และจัดการข้อมูลในฐานข้อมูลเชิงสัมพันธ์ SQL Server 2008 เมื่อคำนึงถึงโอกาสนี้ แบบสอบถามสุดท้ายสามารถเขียนใหม่เป็น:

    INSERT INTO Product_D ค่า

    ("B", 1158, "พีซี")

    ("C", 2190, "แล็ปท็อป"),

INSERT INTO คืออะไร?

เป้าหมายหลักของระบบฐานข้อมูลคือการจัดเก็บข้อมูลในตาราง ข้อมูลมักจะถูกจัดเตรียมโดยโปรแกรมแอปพลิเคชันที่ทำงานบนฐานข้อมูล ในตอนท้ายนั้น SQL มีคำสั่ง INSERT ที่ใช้ในการเก็บข้อมูลลงในตาราง NS คำสั่ง INSERT สร้างแถวใหม่ในตารางเพื่อเก็บข้อมูล

ไวยากรณ์พื้นฐาน

ลองดูที่ไวยากรณ์พื้นฐานของคำสั่ง SQL INSERT ที่แสดงด้านล่าง

INSERT INTO `table_name` (column_1, column_2, ...) VALUES (value_1, value_2, ...);

  • INSERT INTO `table_name`เป็นคำสั่งที่บอกให้เซิร์ฟเวอร์ MySQL เพิ่มแถวใหม่ลงในตารางชื่อ `table_name`
  • (column_1, column_2, ...)ระบุคอลัมน์ที่จะอัปเดตในแถวใหม่
  • ค่า (value_1, value_2, ...)ระบุค่าที่จะเพิ่มลงในแถวใหม่

เมื่อระบุค่าข้อมูลที่จะแทรกลงในตารางใหม่ ควรพิจารณาสิ่งต่อไปนี้ในขณะที่จัดการกับข้อมูลประเภทต่างๆ

  • ประเภทข้อมูลสตริง- ค่าสตริงทั้งหมดควรอยู่ในเครื่องหมายคำพูดเดี่ยว
  • ชนิดข้อมูลตัวเลข- ควรระบุค่าตัวเลขทั้งหมดโดยตรงโดยไม่ต้องใส่เครื่องหมายคำพูดเดี่ยวหรือคู่
  • ประเภทข้อมูลวันที่- ใส่ค่าวันที่ในเครื่องหมายคำพูดเดี่ยวในรูปแบบ "YYYY-MM-DD"

ตัวอย่าง:

สมมติว่าเรามีรายชื่อสมาชิกห้องสมุดใหม่ที่ต้องเพิ่มลงในฐานข้อมูลดังต่อไปนี้

ชื่อเต็ม วันเกิด เพศ ที่อยู่ทางกายภาพ รหัสไปรษณีย์ เบอร์ติดต่อ ที่อยู่อีเมล
ลีโอนาร์ด ฮอฟสตัดเตอร์ ชาย Woodcrest 0845738767
เชลดอน คูเปอร์ ชาย Woodcrest 0976736763
Rajesh Koothrappali ชาย แฟร์วิว 0938867763
เลสลี่ วิงเคิล 14/02/1984 ชาย 0987636553
Howard wolowitz 24/08/1981 ชาย เซาท์พาร์ก ตู้ปณ. กล่อง 4563 0987786553

ให้ "INSERT ข้อมูลทีละตัว เราจะเริ่มด้วย Leonard Hofstadter เราจะถือว่าหมายเลขติดต่อเป็นประเภทข้อมูลที่เป็นตัวเลขและไม่ใส่ตัวเลขในเครื่องหมายคำพูดเดี่ยว

INSERT INTO `สมาชิก' (` full_names`, `gender`,` physical_address`, `contact_number`) ค่านิยม (" Leonard Hofstadter "," Male "," Woodcrest ", 0845738767);

การดำเนินการสคริปต์ด้านบนจะทำให้ 0 ลดลงจากหมายเลขติดต่อของ Leonard เนื่องจากค่าจะถือเป็นค่าตัวเลขและศูนย์ (0) ที่จุดเริ่มต้นจะลดลงเนื่องจากไม่มีนัยสำคัญ

เพื่อหลีกเลี่ยงปัญหาดังกล่าว ค่าจะต้องอยู่ในเครื่องหมายคำพูดเดี่ยวดังแสดงด้านล่าง -

INSERT INTO `สมาชิก' (` full_names`, `gender`,` physical_address`, `contact_number`) ค่านิยม (" Sheldon Cooper "," Male "," Woodcrest "," 0976736763 ");

ในกรณีข้างต้น ศูนย์ (0) จะไม่ดรอป

การเปลี่ยนลำดับของคอลัมน์จะไม่มีผลกับแบบสอบถาม INSERT ตราบใดที่ค่าที่ถูกต้องถูกจับคู่กับคอลัมน์ที่ถูกต้อง

แบบสอบถามที่แสดงด้านล่างแสดงให้เห็นถึงจุดข้างต้น

INSERT INTO `สมาชิก' (` contact_number`, `gender`,` full_names`, `physical_address`) VALUES (" 0938867763 "," Male "," Rajesh Koothrappali "," Woodcrest ");

ข้อความค้นหาข้างต้นข้ามคอลัมน์วันเดือนปีเกิด โดยค่าเริ่มต้น MySQL จะแทรกค่า NULL ในคอลัมน์ที่ข้ามไปในการสืบค้น INSERT

ตอนนี้ขอแทรกบันทึกสำหรับเลสลี่ซึ่งมีวันเดือนปีเกิดที่ให้มา ค่าวันที่ควรอยู่ในเครื่องหมายคำพูดเดี่ยวโดยใช้รูปแบบ "YYYY-MM-DD"

INSERT INTO `สมาชิก' (` full_names`, `date_of_birth`,` gender`, `physical_address`,` contact_number`) VALUES ("Leslie Winkle", "1984-02-14", "Male", "Woodcrest", " 0987636553 ");

ข้อความค้นหาทั้งหมดข้างต้นระบุคอลัมน์และจับคู่กับค่าในคำสั่งแทรก หากเรากำลังระบุค่าสำหรับคอลัมน์ทั้งหมดในตาราง เราสามารถละเว้นคอลัมน์จากคิวรีแทรกได้

แทรกลงในค่า `สมาชิก' (9," Howard Wolowitz "," Male "," 1981-08-24 "," SouthPark "," P.O. Box 4563 "," 0987786553 "," lwolowitzemail.me ");

ให้ตอนนี้ใช้คำสั่ง SELECT เพื่อดูแถวทั้งหมดในตารางสมาชิก SELECT * FROM'สมาชิก';

หมายเลขสมาชิกfull_namesเพศวันเกิดphysical_addressรหัสไปรษณีย์contct_numberอีเมล
1 เจเน็ต โจนส์หญิง21-07-1980 ผังถนนแรกหมายเลข 4กระเป๋าส่วนตัว0759 253 542 ที่อยู่อีเมลนี้จะถูกป้องกันจากสแปมบอท คุณต้องเปิดใช้งาน JavaScript เพื่อดู
2 เจเน็ต สมิธ โจนส์หญิง23-06-1980 Melrose 123โมฆะโมฆะที่อยู่อีเมลนี้จะถูกป้องกันจากสแปมบอท คุณต้องเปิดใช้งาน JavaScript เพื่อดู
3 โรเบิร์ต ฟิลชาย12-07-1989 3rd Street 34โมฆะ12345 ที่อยู่อีเมลนี้จะถูกป้องกันจากสแปมบอท คุณต้องเปิดใช้งาน JavaScript เพื่อดู
4 กลอเรีย วิลเลียมส์หญิง14-02-1984 2nd Street 23โมฆะโมฆะโมฆะ
5 ลีโอนาร์ด ฮอฟสตัดเตอร์ชายโมฆะWoodcrestโมฆะ845738767 โมฆะ
6 เชลดอน คูเปอร์ชายโมฆะWoodcrestโมฆะ976736763 โมฆะ
7 Rajesh KoothrappaliชายโมฆะWoodcrestโมฆะ938867763 โมฆะ
8 เลสลี่ วิงเคิลชาย14-02-1984 Woodcrestโมฆะ987636553 โมฆะ
9 Howard wolowitzชาย24-08-1981 เซาท์พาร์กตู้ปณ. กล่อง 4563987786553 ที่อยู่อีเมลนี้จะถูกป้องกันจากสแปมบอท คุณต้องเปิดใช้งาน JavaScript เพื่อดู

สังเกตว่าหมายเลขติดต่อของ Leonard Hofstadter ได้ลดศูนย์ (0) จากหมายเลขติดต่อ เบอร์ติดต่ออื่นๆ ไม่ได้ทิ้งศูนย์ (0) ไว้ที่จุดเริ่มต้น

การแทรกลงในตารางจากตารางอื่น

คำสั่ง INSERT ยังสามารถใช้เพื่อแทรกข้อมูลลงในตารางจากตารางอื่น ไวยากรณ์พื้นฐานดังที่แสดงด้านล่าง

INSERT INTO table_1 เลือก * จาก table_2;

เรามาดูตัวอย่างที่ใช้งานได้จริง เราจะสร้างตารางจำลองสำหรับหมวดหมู่ภาพยนตร์เพื่อการสาธิต เราจะเรียกหมวดหมู่ตารางใหม่ types_archive สคริปต์ที่แสดงด้านล่างสร้างตาราง

สร้างตาราง `categories_archive` (` category_id` int (11) AUTO_INCREMENT, `category_name` varchar (150) DEFAULT NULL, `หมายเหตุ` varchar (500) DEFAULT NULL, คีย์หลัก (`category_id`))

รันสคริปต์ด้านบนเพื่อสร้างตาราง

ตอนนี้ให้แทรกแถวทั้งหมดจากตารางหมวดหมู่ลงในตารางเก็บหมวดหมู่ สคริปต์ที่แสดงด้านล่างช่วยให้เราบรรลุเป้าหมายนั้น

INSERT INTO `categories_archive` SELECT * FROM` หมวดหมู่ `;

การดำเนินการสคริปต์ข้างต้นจะแทรกแถวทั้งหมดจากตารางหมวดหมู่ลงในตารางเก็บถาวรหมวดหมู่ โปรดทราบว่าโครงสร้างตารางจะต้องเหมือนกันเพื่อให้สคริปต์ทำงาน สคริปต์ที่มีประสิทธิภาพมากขึ้นคือสคริปต์ที่จับคู่ชื่อคอลัมน์ในตารางแทรกกับชื่อในตารางที่มีข้อมูล

แบบสอบถามที่แสดงด้านล่างแสดงให้เห็นถึงการใช้งาน

INSERT INTO `categories_archive` (category_id, category_name, หมายเหตุ) SELECT category_id, category_name ข้อสังเกตจาก 'หมวดหมู่';

ดำเนินการแบบสอบถาม SELECT

เลือก * จาก `categories_archive`

ให้ผลลัพธ์ดังแสดงด้านล่าง

หมวดหมู่_idชื่อหมวดหมู่หมายเหตุ
1 ตลกภาพยนตร์ที่มีอารมณ์ขัน
2 โรแมนติกเรื่องราวของความรัก
3 มหากาพย์หนังเอเลี่ยนเรื่อง
4 สยองขวัญโมฆะ
5 นิยายวิทยาศาสตร์โมฆะ
6 ระทึกขวัญโมฆะ
7 การกระทำโมฆะ
8 โรแมนติกคอมเมดี้โมฆะ
9 การ์ตูนโมฆะ
10 การ์ตูนโมฆะ

สรุป

  • คำสั่ง INSERT ใช้เพื่อเพิ่มข้อมูลใหม่ลงในตาราง
  • ค่าวันที่และสตริงควรอยู่ในเครื่องหมายคำพูดเดี่ยว
  • ค่าตัวเลขไม่จำเป็นต้องอยู่ในเครื่องหมายคำพูด
  • คำสั่ง INSERT ยังสามารถใช้เพื่อแทรกข้อมูลจากตารางหนึ่งไปยังอีกตารางหนึ่ง