พื้นฐาน 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 ตัวอย่าง
คัดลอกเพียงไม่กี่คอลัมน์จาก "ซัพพลายเออร์" ไปยัง "ลูกค้า":
คัดลอกเฉพาะซัพพลายเออร์เยอรมันไปยัง "ลูกค้า"