พื้นฐาน T-SQL ดีเอ็มแอล. Transact-SQL - เวอร์ชันสาธิตฐานข้อมูลการแทรกข้อมูล

นอกเหนือจากคำสั่ง SELECT ที่กล่าวถึงก่อนหน้านี้ Data Manipulation Language (DML) ยังมีคำสั่งอื่นๆ อีกสามคำสั่ง: INSERT, UPDATE และ DELETE เช่นเดียวกับคำสั่ง SELECT คำสั่งทั้งสามนี้ทำงานบนตารางหรือมุมมอง บทความนี้ครอบคลุมถึงคำสั่ง INSERT และอีกสองคำสั่งจะกล่าวถึงในบทความถัดไป

คำสั่ง INSERTแทรกแถว (หรือบางส่วนของแถว) ลงในตาราง คำสั่งนี้มีสองรูปแบบที่แตกต่างกัน:

INSERT tab_name [(col_list)] ค่าเริ่มต้น | ค่า (( DEFAULT | NULL | expression ) [ ,...n]) INSERT INTO tab_name | view_name [(col_list)] (select_statement |Execute_statement) แบบแผนไวยากรณ์

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

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

การแทรกแถวเดียว

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

พารามิเตอร์ค่าเริ่มต้นแทรกค่าเริ่มต้นให้กับทุกคอลัมน์ คอลัมน์ที่มีประเภทข้อมูล TIMESTAMP หรือคุณสมบัติ IDENTITY จะถูกแทรกโดยค่าเริ่มต้นด้วยค่าที่ระบบสร้างขึ้นโดยอัตโนมัติ สำหรับคอลัมน์ของประเภทข้อมูลอื่น ค่าเริ่มต้นที่ไม่ใช่ค่าว่างที่เกี่ยวข้องจะถูกแทรก หากมี หรือมิฉะนั้นจะเป็น NULL หากคอลัมน์ไม่อนุญาตให้มีค่า Null และไม่มีการกำหนดค่าเริ่มต้น คำสั่ง INSERT จะล้มเหลวและข้อความจะปรากฏขึ้น

ตัวอย่างด้านล่างแทรกแถวลงในตารางพนักงานในฐานข้อมูล SampleDb ซึ่งสาธิตการใช้คำสั่ง INSERT เพื่อแทรกข้อมูลจำนวนเล็กน้อยลงในฐานข้อมูล:

ใช้ SampleDb; แทรกลงในค่านิยมของพนักงาน (34990, "Andrey", "Batonov", "d1"); แทรกลงในค่านิยมของพนักงาน (38640, "Alexey", "Vasin", "d3");

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

ใช้ SampleDb; แทรกลงในค่านิยมของพนักงาน (34991, "Andrey", "Batonov", NULL);

หากต้องการแทรกค่าลงในคอลัมน์บางคอลัมน์ (แต่ไม่ใช่ทั้งหมด) ของตาราง คุณจะต้องระบุคอลัมน์เหล่านั้นอย่างชัดเจน คอลัมน์ที่ไม่ระบุต้องอนุญาตค่า NULL หรือมีการกำหนดค่าเริ่มต้น

ใช้ SampleDb; INSERT INTO Employee(Id, FirstName, LastName) VALUES (34992, "Andrey", "Batonov");

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

ลำดับของค่าใน ข้อเสนอค่านิยมคำสั่ง INSERT อาจแตกต่างจากลำดับที่ระบุในคำสั่ง CREATE TABLE ในกรณีนี้ ลำดับจะต้องตรงกับลำดับที่แสดงคอลัมน์ที่เกี่ยวข้องในรายการคอลัมน์ ด้านล่างนี้เป็นตัวอย่างของการแทรกข้อมูลในลำดับที่แตกต่างจากต้นฉบับ:

ใช้ SampleDb; INSERT INTO Employee(หมายเลขแผนก, นามสกุล, Id, ชื่อ) ค่า ("d1", "Batonov", 34993, "Andrey");

การแทรกหลายแถว

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

ตาราง MoscowDepartment ใหม่ที่สร้างขึ้นในตัวอย่างด้านบนมีคอลัมน์เดียวกันกับตาราง Department ที่มีอยู่ ยกเว้นคอลัมน์ Location ที่หายไป แบบสอบถามย่อยในคำสั่ง INSERT จะเลือกแถวทั้งหมดในตาราง Department ซึ่งค่าคอลัมน์ Location คือ "Moscow" ซึ่งจะถูกแทรกลงในตารางใหม่ที่สร้างขึ้นที่จุดเริ่มต้นของแบบสอบถาม

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

ใช้ SampleDb; สร้างทีมผู้จัดการตาราง (EmpId INT ไม่เป็น NULL, ProjectNumber CHAR (4) ไม่เป็น NULL, EnterDate DATE); แทรกลงในทีมผู้จัดการ (EmpId, ProjectNumber, EnterDate) เลือก EmpId, ProjectNumber, EnterDate จาก Works_on โดยที่งาน = "ผู้จัดการ";

ก่อนที่จะแทรกแถวโดยใช้คำสั่ง INSERT ตาราง MoscowDepartment และ ManagerTeam (ในตัวอย่างด้านบน) นั้นว่างเปล่า หากมีตารางอยู่แล้วและมีแถวที่มีข้อมูล แถวใหม่จะถูกเพิ่มเข้าไป

สวัสดีทุกคน! บทความนี้จะหารือเกี่ยวกับวิธีที่คุณสามารถทำได้ เพิ่มข้อมูลลงในตารางที่ไมโครซอฟต์ เซิร์ฟเวอร์ SQLหากคุณคุ้นเคยกับภาษา T-SQL บ้างแล้วคุณก็อาจรู้ว่าตอนนี้เราจะพูดถึงคำสั่ง INSERT รวมถึงวิธีการใช้เพื่อเพิ่มข้อมูลลงในตาราง

มาเริ่มกันตามปกติด้วยทฤษฎีเล็กน้อย

คำสั่ง INSERT ใน T-SQL

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

มีหลายวิธีในการใช้คำสั่ง INSERT กับข้อมูลที่ต้องการแทรก:

  • แสดงรายการค่าเฉพาะที่จะแทรก
  • การระบุชุดข้อมูลเป็นแบบสอบถาม SELECT
  • การระบุชุดข้อมูลในรูปแบบของการเรียกขั้นตอนที่ส่งคืนข้อมูลแบบตาราง

ไวยากรณ์แบบง่าย

แทรก [ตาราง] ( รายการคอลัมน์...) ค่านิยม ( รายการค่า, … ) หรือเลือก คำขอตัวอย่างหรือดำเนินการ ขั้นตอน

  • INSERT INTO เป็นคำสั่งเพื่อเพิ่มข้อมูลลงในตาราง
  • Table คือชื่อของตารางเป้าหมายที่คุณต้องการแทรกเรคคอร์ดใหม่
  • รายการคอลัมน์คือรายการชื่อคอลัมน์ของตารางที่จะแทรกข้อมูล โดยคั่นด้วยเครื่องหมายจุลภาค
  • VALUES เป็นตัวสร้างค่าตารางซึ่งเราระบุค่าที่เราจะแทรกลงในตาราง
  • รายการค่าคือค่าที่จะแทรกโดยคั่นด้วยเครื่องหมายจุลภาค มีการแสดงรายการตามลำดับที่คอลัมน์ปรากฏในรายการคอลัมน์
  • SELECT เป็นแบบสอบถามเพื่อเลือกข้อมูลที่จะแทรกลงในตาราง ชุดผลลัพธ์ที่แบบสอบถามส่งคืนจะต้องตรงกับรายการคอลัมน์
  • EXECUTE เป็นการเรียกใช้โพรซีเดอร์เพื่อรับข้อมูลเพื่อแทรกลงในตาราง ชุดผลลัพธ์ที่ Stored Procedure ส่งคืนต้องตรงกับรายการคอลัมน์

นี่คือลักษณะไวยากรณ์แบบง่ายของคำสั่ง INSERT INTO โดยคร่าวๆ ในกรณีส่วนใหญ่ คุณจะเพิ่มระเบียนใหม่ลงในตารางด้วยวิธีต่อไปนี้

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

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

ฉันอยากจะทราบด้วยว่าประเภทข้อมูลของค่าที่คุณจะแทรกจะต้องตรงกับประเภทข้อมูลของคอลัมน์ที่จะแทรกค่านี้หรืออย่างน้อยก็รองรับการแปลงโดยนัย แต่ฉันแนะนำให้คุณควบคุมประเภทข้อมูล ( รูปแบบ) ค่าทั้งในรายการค่าและในแบบสอบถาม SELECT

ทฤษฎีพอแล้ว เรามาฝึกฝนกันต่อ

ข้อมูลเบื้องต้น

ในการเพิ่มข้อมูลลงในตาราง เราจำเป็นต้องมีตารางเอง ดังนั้นเรามาสร้างตารางขึ้นมาและลองเพิ่มระเบียนลงไปกันดีกว่า

บันทึก! ตัวอย่างทั้งหมดจะทำงานใน Microsoft SQL Server 2016 Express

สร้างตาราง TestTable (ข้อมูลประจำตัว (1,1) ไม่เป็นโมฆะ (100) ไม่เป็นโมฆะ ไม่เป็นโมฆะ)

ตารางทดสอบของเราจะมีรายการผลิตภัณฑ์พร้อมราคา

นอกจากนี้ในตัวอย่าง เราจะใช้ขั้นตอนที่ส่งคืนค่าตารางเพื่อเพิ่มข้อมูลลงในตาราง ดังนั้นเรามาสร้างขั้นตอนนั้นด้วย

สร้างขั้นตอน TestProcedure AS BEGIN เลือกชื่อผลิตภัณฑ์, ราคาจาก TestTable END

ตัวอย่างเช่น จะส่งกลับข้อมูลจากตาราง TestTable ที่สร้างขึ้นใหม่

บันทึก!

ตามที่คุณเข้าใจ การอ่านเนื้อหานี้แสดงถึงการมีความรู้บางประการ ภาษา T-SQLดังนั้นหากคุณมีบางอย่างไม่ชัดเจน ฉันขอแนะนำให้คุณทำความคุ้นเคยกับเนื้อหาต่อไปนี้:

ตัวอย่างที่ 1 – การเพิ่มเรกคอร์ดใหม่ลงในตารางโดยใช้ตัวสร้างค่าตาราง

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

แทรกลงในค่า TestTable (ชื่อผลิตภัณฑ์, ราคา) ("คอมพิวเตอร์", 100) GO SELECT * FROM TestTable

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

หลังจากคำสั่ง INSERT ฉันเขียน คำสั่งเลือกและแยกพวกเขาออกจากทีม GO

ตอนนี้ลองจินตนาการว่าเราต้องเพิ่มสองสามบรรทัด เราจะเขียนคำขอต่อไปนี้สำหรับสิ่งนี้

INSERT INTO TestTable(ProductName, Price) VALUES ("คอมพิวเตอร์", 100), ("คีย์บอร์ด", 20), ("จอภาพ", 50) GO SELECT * FROM TestTable


ตัวอย่างที่ 2 - การเพิ่มแถวใหม่ลงในตารางโดยใช้แบบสอบถาม SELECT

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

แทรกลงในตารางทดสอบ(ชื่อผลิตภัณฑ์, ราคา) เลือกชื่อผลิตภัณฑ์, ราคาจากตารางทดสอบ WHERE Id >


ใน ในตัวอย่างนี้พวกเราเขียน เลือกแบบสอบถามซึ่งส่งคืนข้อมูลจากตาราง TestTable แต่ไม่ใช่ทั้งหมด แต่เฉพาะข้อมูลที่มีตัวระบุมากกว่า 2 และผลลัพธ์ก็ถูกแทรกลงในตาราง TestTable เดียวกัน

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

แทรกลงใน TestTable เลือกชื่อผลิตภัณฑ์ ราคาจาก TestTable WHERE Id > 2 GO SELECT * FROM TestTable


ในกรณีนี้ เราแน่ใจว่าในตาราง TestTable คอลัมน์แรกคือ ProductName และคอลัมน์ที่สองคือ Price ดังนั้นเราจึงสามารถเขียนคอลัมน์ดังกล่าวได้ แต่ในทางปฏิบัติ เป็นการดีกว่าที่จะระบุรายการคอลัมน์

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

ตัวอย่างที่ 3 - การเพิ่มบันทึกใหม่ลงในตารางโดยใช้ขั้นตอนการจัดเก็บ

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

INSERT INTO TestTable(ชื่อผลิตภัณฑ์, ราคา) EXEC TestProcedure GO SELECT * FROM TestTable


หวัง, วัสดุนี้ช่วยให้คุณเข้าใจคำแนะนำ ใส่ลงในและนั่นคือทั้งหมดที่ฉันมีตอนนี้!

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

1. การเพิ่มบรรทัดทั้งหมด

ตามชื่อผู้ดำเนินการ แทรกใช้ในการแทรก (ต่อท้าย) แถวลงในตารางฐานข้อมูล การเพิ่มสามารถทำได้หลายวิธี:

  • - เพิ่มหนึ่งบรรทัดเต็ม
  • - เพิ่มส่วนหนึ่งของบรรทัด
  • - เพิ่มผลลัพธ์แบบสอบถาม

ดังนั้น ในการเพิ่มแถวใหม่ลงในตาราง เราจำเป็นต้องระบุชื่อตาราง แสดงรายการชื่อคอลัมน์ และระบุค่าสำหรับแต่ละคอลัมน์โดยใช้โครงสร้าง ใส่ลงใน table_name (field1, field2 ...) ค่านิยม (ค่า 1 ค่า 2...). ลองดูตัวอย่าง

แทรกค่าผู้ขาย (ID, ที่อยู่, เมือง, ชื่อผู้ขาย, ประเทศ)("6", "1st Street", "ลอสแอนเจลิส", "แฮร์รี่ มอนโร", "สหรัฐอเมริกา")

คุณยังสามารถเปลี่ยนลำดับของชื่อคอลัมน์ได้ แต่ในขณะเดียวกันคุณต้องเปลี่ยนลำดับของค่าในพารามิเตอร์ ค่านิยม.

2. การเพิ่มส่วนหนึ่งของบรรทัด

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

แทรกลงในค่าผู้ขาย (ID, เมือง, ชื่อผู้ขาย)("6", "ลอสแอนเจลิส", "แฮร์รี มอนโร")

ในตัวอย่างนี้ เราไม่ได้ระบุค่าสำหรับสองคอลัมน์ ที่อยู่และ ประเทศ. คุณสามารถแยกบางคอลัมน์ออกจากคำสั่งได้ ใส่ลงในหากอนุญาตให้ใช้คำจำกัดความของตาราง ในกรณีนี้ ต้องเป็นไปตามเงื่อนไขข้อใดข้อหนึ่ง: คอลัมน์นี้ถูกกำหนดว่าถูกต้อง โมฆะ(ไม่มีค่าใดๆ) หรือค่าเริ่มต้นที่ระบุในคำจำกัดความของตาราง ซึ่งหมายความว่าหากไม่มีการระบุค่า ระบบจะใช้ค่าเริ่มต้น หากคุณไม่มีคอลัมน์จากตารางที่ไม่อนุญาตให้ค่าปรากฏในแถว โมฆะและไม่มีการกำหนดค่าเริ่มต้น DBMS จะสร้างข้อความแสดงข้อผิดพลาดและแถวจะไม่ถูกเพิ่ม

3. การเพิ่มข้อมูลที่เลือก

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

ใส่ผู้ขาย (ID, ที่อยู่, เมือง, ชื่อผู้ขาย, ประเทศ) SELECTID, ที่อยู่, เมือง, ชื่อผู้ขาย, ประเทศจาก Sellers_EU

คุณต้องให้ความสนใจเพื่อไม่ให้เกิดค่าของคีย์ภายในซ้ำ (field บัตรประจำตัวประชาชน) มิฉะนั้นจะเกิดข้อผิดพลาดขึ้น ผู้ดำเนินการ เลือกอาจรวมถึงข้อเสนอแนะด้วย ที่ไหนเพื่อกรองข้อมูล ควรสังเกตด้วยว่า DBMS ไม่ได้ใส่ใจกับชื่อของคอลัมน์ที่มีอยู่ในคำสั่ง เลือกเฉพาะลำดับที่จัดไว้เท่านั้นที่สำคัญสำหรับเธอ ดังนั้นข้อมูลในคอลัมน์แรกที่ระบุที่ถูกเลือกเนื่องจาก เลือกจะถูกกรอกลงในคอลัมน์แรกของตารางไม่ว่าในกรณีใด ผู้ขายระบุหลังตัวดำเนินการ ใส่ลงในโดยไม่คำนึงถึงชื่อฟิลด์

4. การคัดลอกข้อมูลจากตารางหนึ่งไปยังอีกตารางหนึ่ง

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

เลือก * เข้าสู่ผู้ขาย_ใหม่จากผู้ขาย

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

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

อัปเดตครั้งล่าสุด: 07/13/2017

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

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

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

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

สร้างผลิตภัณฑ์ฐานข้อมูลdb; ไปใช้ผลิตภัณฑ์db; สร้างผลิตภัณฑ์ตาราง (Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, ผู้ผลิต NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL)

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

แทรกค่าผลิตภัณฑ์ ("iPhone 7", "Apple", 5, 52000)

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

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

    ชื่อสินค้า: "ไอโฟน 7"

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

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

INSERT INTO Products (ชื่อผลิตภัณฑ์, ราคา, ผู้ผลิต) ค่า ("iPhone 6S", 41000, "Apple")

ที่นี่ค่าจะถูกระบุเพียงสามคอลัมน์เท่านั้น ยิ่งกว่านั้นตอนนี้ค่าจะถูกส่งตามลำดับคอลัมน์:

    ชื่อสินค้า: "ไอโฟน 6S"

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

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

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

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

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

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

แทรกลงในผลิตภัณฑ์ (ชื่อผลิตภัณฑ์, ผู้ผลิต, จำนวนผลิตภัณฑ์, ราคา) ค่า ("Mi6", "Xiaomi", ค่าเริ่มต้น, 28000)

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

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

แทรกลงในค่าเริ่มต้นของผลิตภัณฑ์

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

เมื่อใช้ SQL คุณสามารถคัดลอกข้อมูลจากตารางหนึ่งไปยังอีกตารางหนึ่งได้

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

SQL INSERT INTO SELECT คำสั่ง

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

SQL INSERT ลงใน SELECT, ไวยากรณ์

เราสามารถคัดลอกคอลัมน์ทั้งหมดจากตารางหนึ่งไปยังอีกตารางหนึ่งซึ่งเป็นตารางที่มีอยู่ได้:

ใส่ลงใน ตารางที่ 2
เลือก * จาก ตารางที่ 1;

หรือเราสามารถคัดลอกเฉพาะคอลัมน์ที่เราต้องการไปยังตารางอื่นที่มีอยู่ได้:

ใส่ลงใน ตารางที่ 2
(คอลัมน์_ชื่อ)
เลือก column_name(s)
จาก ตารางที่ 1;

เวอร์ชันสาธิตของฐานข้อมูล

ในบทช่วยสอนนี้ เราจะใช้ฐานข้อมูล Northwind ที่รู้จักกันดี

ด้านล่างนี้คือตัวเลือกจากตาราง "ลูกค้า":

รหัสผู้ใช้ชื่อลูกค้าผู้ติดต่อที่อยู่เมืองรหัสไปรษณีย์ประเทศ
1 อัลเฟรดส์ ฟัตเตอร์คิสต์ มาเรีย แอนเดอร์ส ถนนโอเบเร 57 เบอร์ลิน 12209 เยอรมนี
2 Ana Trujillo Emparedados และเฮลาโดส อานา ทรูจิลโล อวาดา. รัฐธรรมนูญ 2222 เม็กซิโก ดี.เอฟ. 05021 เม็กซิโก
3 อันโตนิโอ โมเรโน ทาเกเรีย อันโตนิโอ โมเรโน่ มาทาเดรอส 2312 เม็กซิโก ดี.เอฟ. 05023 เม็กซิโก

และการเลือกจากตาราง "ซัพพลายเออร์":

SQL INSERT ลงใน SELECT ตัวอย่าง

คัดลอกเพียงไม่กี่คอลัมน์จาก "ซัพพลายเออร์" ไปยัง "ลูกค้า":

คัดลอกเฉพาะซัพพลายเออร์เยอรมันไปยัง "ลูกค้า"