แบบสอบถามย่อย SQL

สิ่งสำคัญ:  บทความนี้เป็นการแปลด้วยเครื่อง โปรดดู ข้อจำกัดความรับผิดชอบ โปรดดูบทความฉบับภาษาอังกฤษ ที่นี่ เพื่อใช้อ้างอิง

แบบสอบถามย่อยคือส่วนของคำสั่ง SELECT ที่ซ้อนอยู่ภายในคำสั่ง SELECT, SELECT...INTO, INSERT...INTO, DELETE หรือ UPDATE หรือซ้อนอยู่ภายในแบบสอบถามย่อยอื่น

ไวยากรณ์

คุณสามารถใช้ไวยากรณ์ได้สามรูปแบบเพื่อสร้างแบบสอบถามย่อย

comparison [ANY | ALL | SOME] (sqlstatement)

expression [NOT] IN (sqlstatement)

[NOT] EXISTS (sqlstatement)

แบบสอบถามย่อยมีส่วนต่างๆ ดังนี้

ส่วน

คำอธิบาย

comparison

นิพจน์และตัวดำเนินการเปรียบเทียบที่เปรียบเทียบนิพจน์กับผลลัพธ์ของแบบสอบถามย่อย

expression

นิพจน์ที่ใช้ค้นหาชุดผลลัพธ์ของแบบสอบถามย่อย

sqlstatement

คำสั่ง SELECT ที่ใช้รูปแบบเละกฎเดียวกับคำสั่ง SELECT อื่นๆ และจะต้องอยู่ภายในวงเล็บ


ข้อสังเกต

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

ให้ใช้เพรดิเคต ANY หรือ SOME ซึ่งมีความหมายเดียวกัน เพื่อเรียกระเบียนในแบบสอบถามหลักที่ตรงตามเงื่อนไขการเปรียบเทียบกับระเบียนใดๆ ที่ถูกเรียกมาในแบบสอบถามย่อย ตัวอย่างต่อไปนี้ส่งกลับผลิตภัณฑ์ทั้งหมดที่มีราคาต่อหน่วยสูงกว่าราคาต่อหน่วยของผลิตภัณฑ์อื่นที่ขายโดยมีส่วนลด 25 เปอร์เซ็นต์หรือมากกว่า

SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);

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

ให้ใช้เพรดิเคต IN เมื่อต้องการเรียกเฉพาะระเบียนในแบบสอบถามหลักที่มีค่าตรงกับบางระเบียนในแบบสอบถามย่อย ตัวอย่างต่อไปนี้ส่งกลับผลิตภัณฑ์ทั้งหมดที่มีส่วนลด 25 เปอร์เซ็นต์หรือมากกว่า

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);

ในทางตรงกันข้าม คุณสามารถใช้ NOT IN เพื่อเรียกเฉพาะระเบียนในแบบสอบถามหลักที่มีค่าไม่ตรงกับระเบียนใดในแบบสอบถามย่อยได้

ให้ใช้เพรดิเคต EXISTS (โดยอาจใช้คำสงวน NOT ร่วมด้วย) ในการเปรียบเทียบ จริง/เท็จ ต่างๆ เมื่อต้องการพิจารณาว่าแบบสอบถามย่อยนั้นส่งกลับระเบียนบ้างหรือไม่

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

SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;

ในตัวอย่างข้างต้น คำสงวน AS นั้นจะใช้หรือไม่ก็ได้

อนุญาตให้มีในคิวรีย่อยบางนั่นคือโดยเฉพาะอย่างยิ่ง เป็นเพรดิเคต (ที่มีในคำสั่ง where) คิวรีย่อยเป็นผลลัพธ์ (เหล่านั้นในรายการเลือก) ไม่ได้ในคิวรีแบบตาราง



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

ขยายทักษะของคุณ
สำรวจการฝึกอบรม
รับฟีเจอร์ใหม่ก่อนใคร
เข้าร่วม Office Insider

ข้อมูลนี้เป็นประโยชน์หรือไม่

ขอบคุณสำหรับคำติชมของคุณ!

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

×