ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้
ลงชื่อเข้าใช้ด้วย Microsoft
ลงชื่อเข้าใช้หรือสร้างบัญชี
สวัสดี
เลือกบัญชีอื่น
คุณมีหลายบัญชี
เลือกบัญชีที่คุณต้องการลงชื่อเข้าใช้

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

คุณสามารถเขียนคิวรีย่อยใน นิพจน์ หรือในคําสั่ง Structured Query Language (SQL) ใน มุมมอง SQL

ในบทความนี้

ใช้ผลลัพธ์ของคิวรีเป็นเขตข้อมูลในคิวรีอื่น

คุณสามารถใช้คิวรีย่อยเป็นนามแฝงของเขตข้อมูลได้ ใช้คิวรีย่อยเป็นนามแฝงของเขตข้อมูลเมื่อคุณต้องการใช้ผลลัพธ์คิวรีย่อยเป็นเขตข้อมูลในคิวรีหลักของคุณ

หมายเหตุ: คิวรีย่อยที่คุณใช้เป็นนามแฝงของเขตข้อมูลไม่สามารถส่งกลับเขตข้อมูลได้มากกว่าหนึ่งเขตข้อมูล

คุณสามารถใช้นามแฝงของเขตข้อมูลคิวรีย่อยเพื่อแสดงค่าที่ขึ้นอยู่กับค่าอื่นๆ ในแถวปัจจุบัน ซึ่งไม่สามารถทําได้โดยไม่ต้องใช้คิวรีย่อย

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

  1. บนแท็บ ไฟล์ ให้คลิก ใหม่

  2. ภายใต้ เทมเพลตที่พร้อมใช้งาน ให้คลิก เทมเพลตตัวอย่าง

  3. คลิก Northwind แล้วคลิก สร้าง

  4. ทำตามคำแนะนำบนหน้า Northwind Traders (บนแท็บวัตถุ หน้าจอเริ่มต้น) เพื่อเปิดฐานข้อมูลนี้ จากนั้นปิดหน้าต่างของกล่องโต้ตอบการเข้าสู่ระบบ

  5. บนแท็บ สร้าง ในกลุ่ม คิวรี ให้คลิก การออกแบบคิวรี

  6. คลิกแท็บ คิวรี แล้วดับเบิลคลิกคําสั่งซื้อผลิตภัณฑ์

  7. ดับเบิลคลิกที่เขตข้อมูล รหัสผลิตภัณฑ์ และเขตข้อมูล วันที่สั่งซื้อ เพื่อเพิ่มเขตข้อมูลเหล่านั้นลงในตารางออกแบบคิวรี

  8. ในแถว เรียงลําดับ ของคอลัมน์ รหัสผลิตภัณฑ์ ของเส้นตาราง ให้เลือก จากน้อยไปหามาก

  9. ในแถว เรียงลําดับ ของคอลัมน์ วันที่สั่งซื้อ ของเส้นตาราง ให้เลือก จากมากไปหาน้อย

  10. ในคอลัมน์ที่สามของเส้นตาราง ให้คลิกขวาที่แถว เขตข้อมูล แล้วคลิก ย่อ/ขยาย บนเมนูทางลัด

  11. ในกล่องโต้ตอบ ย่อ/ขยาย ให้พิมพ์หรือวางนิพจน์ต่อไปนี้:

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

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

  12. ในคอลัมน์ที่สี่ของเส้นตาราง ในแถว เขตข้อมูล ให้พิมพ์นิพจน์ต่อไปนี้

    Interval: [Order Date]-[Prior Date]

    นิพจน์นี้จะคํานวณช่วงเวลาระหว่างวันที่สั่งซื้อแต่ละวันและวันที่สั่งซื้อก่อนหน้าสําหรับผลิตภัณฑ์นั้น โดยใช้ค่าสําหรับวันที่ก่อนหน้าที่เรากําหนดโดยใช้คิวรีย่อย

  13. บนแท็บ ออกแบบ ในกลุ่ม ผลลัพธ์ ให้คลิก เรียกใช้

    1. คิวรีจะเรียกใช้และแสดงรายการชื่อผลิตภัณฑ์ วันที่สั่งซื้อ วันที่สั่งซื้อก่อนหน้า และช่วงระหว่างวันที่สั่งซื้อ ผลลัพธ์จะถูกเรียงลําดับตาม ID ผลิตภัณฑ์ก่อน (จากน้อยไปหามาก) แล้วเรียงลําดับตามวันที่สั่งซื้อ (จากมากไปหาน้อย)

    2. หมายเหตุ: เนื่องจาก ID ผลิตภัณฑ์เป็นเขตข้อมูลการค้นหา ตามค่าเริ่มต้น Access จะแสดงค่าการค้นหา (ในกรณีนี้คือชื่อผลิตภัณฑ์) แทนรหัสผลิตภัณฑ์จริง แม้ว่าจะเปลี่ยนค่าที่ปรากฏ แต่จะไม่เปลี่ยนลําดับการจัดเรียง

  14. ปิดฐานข้อมูล Northwind

ด้านบนของหน้า

ใช้คิวรีย่อยเป็นเกณฑ์สําหรับเขตข้อมูลคิวรี

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

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

  1. เปิด Northwind.accdb และเปิดใช้งานเนื้อหา

  2. ปิดฟอร์มการเข้าสู่ระบบ

  3. บนแท็บ สร้าง ในกลุ่มอื่นๆ ให้คลิก การออกแบบคิวรี

  4. บนแท็บ ตาราง ให้ดับเบิลคลิกคําสั่งซื้อและพนักงาน

  5. ในตาราง ใบสั่งซื้อ ให้ดับเบิลคลิกที่เขตข้อมูล รหัสพนักงาน เขตข้อมูล ID คําสั่งซื้อ และเขตข้อมูล วันที่สั่งซื้อ เพื่อเพิ่มลงในตารางออกแบบคิวรี ในตาราง พนักงาน ให้ดับเบิลคลิกที่เขตข้อมูล ตําแหน่งงาน เพื่อเพิ่มลงในตารางออกแบบ

  6. คลิกขวาที่แถว เกณฑ์ ของคอลัมน์ รหัสพนักงาน แล้วคลิก ย่อ/ขยาย บนเมนูทางลัด

  7. ในกล่อง ย่อ/ขยาย ให้พิมพ์หรือวางนิพจน์ต่อไปนี้

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

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

  8. บนแท็บ ออกแบบ ในกลุ่ม ผลลัพธ์ ให้คลิก เรียกใช้

    การสอบถามจะรัน และผลลัพธ์การสอบถามจะแสดงรายการใบสั่งที่ประมวลผลโดยพนักงานที่ไม่ใช่พนักงานขาย

ด้านบนของหน้า

คําสําคัญ SQL ทั่วไปที่คุณสามารถใช้กับคิวรีย่อย

มีคําสําคัญ SQL หลายคําที่คุณสามารถใช้กับคิวรีย่อย:

หมายเหตุ: รายการนี้ยังไม่ครบถ้วน คุณสามารถใช้คําสําคัญ SQL ที่ถูกต้องใดก็ได้ในคิวรีย่อย โดยไม่รวมถึงคําสําคัญของข้อกําหนดข้อมูล

  • ทั้ง หมด    ใช้ ALL ในส่วนคําสั่ง WHERE เพื่อเรียกใช้แถวที่ตรงกับเงื่อนไขเมื่อเปรียบเทียบกับทุกแถวที่ส่งกลับโดยคิวรีย่อย

    ตัวอย่างเช่น สมมติว่าคุณกําลังวิเคราะห์ข้อมูลนักเรียนที่วิทยาลัย นักเรียนต้องรักษา GPA ขั้นต่ําซึ่งแตกต่างกันไปตามวิชาเอกถึงวิชาเอก วิชาเอกและ GPAs ขั้นต่ําจะถูกเก็บไว้ในตารางที่ชื่อวิชาเอก และข้อมูลนักเรียนที่เกี่ยวข้องจะถูกเก็บไว้ในตารางที่เรียกว่า Student_Records

    เมื่อต้องการดูรายการวิชาเอก (และ GPA ขั้นต่ําของนักเรียนทุกคนที่มีวิชาเอกสูงกว่า GPA ขั้นต่ํา คุณสามารถใช้คิวรีต่อไปนี้:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ใดๆ    ใช้ ANY ในส่วนคําสั่ง WHERE เพื่อเรียกใช้แถวที่ตรงกับเงื่อนไขเมื่อเปรียบเทียบกับแถวอย่างน้อยหนึ่งแถวที่ส่งกลับโดยคิวรีย่อย

    ตัวอย่างเช่น สมมติว่าคุณกําลังวิเคราะห์ข้อมูลนักเรียนที่วิทยาลัย นักเรียนต้องรักษา GPA ขั้นต่ําซึ่งแตกต่างกันไปตามวิชาเอกถึงวิชาเอก วิชาเอกและ GPAs ขั้นต่ําจะถูกเก็บไว้ในตารางที่ชื่อวิชาเอก และข้อมูลนักเรียนที่เกี่ยวข้องจะถูกเก็บไว้ในตารางที่เรียกว่า Student_Records

    เมื่อต้องการดูรายการวิชาเอก (และ GPA ขั้นต่ํา) ที่นักเรียนที่มีวิชาเอกไม่ตรงตาม GPA ขั้นต่ํา คุณอาจใช้คิวรีต่อไปนี้:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    หมายเหตุ: คุณยังสามารถใช้คําสําคัญ SOME เพื่อวัตถุประสงค์เดียวกัน คําสําคัญ SOME มีความหมายเหมือนกันกับ ANY

  • EXISTS     ใช้ EXISTS ในส่วนคําสั่ง WHERE เพื่อระบุว่าคิวรีย่อยควรส่งกลับแถวอย่างน้อยหนึ่งแถว คุณยังสามารถนําหน้า EXISTS ด้วย NOT เพื่อระบุว่าคิวรีย่อยไม่ควรส่งกลับแถวใดๆ

    ตัวอย่างเช่น คิวรีต่อไปนี้ส่งกลับรายการผลิตภัณฑ์ที่พบในคําสั่งซื้อที่มีอยู่อย่างน้อยหนึ่งรายการ:

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    เมื่อใช้ NOT EXISTS คิวรีจะส่งกลับรายการผลิตภัณฑ์ที่ไม่พบในลําดับที่มีอยู่อย่างน้อยหนึ่งรายการ:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • นิ้ว    ใช้ IN ในส่วนคําสั่ง WHERE เพื่อตรวจสอบว่าค่าในแถวปัจจุบันของคิวรีหลักเป็นส่วนหนึ่งของชุดคิวรีย่อยที่ส่งกลับ คุณยังสามารถนําหน้า IN ด้วย NOT เพื่อตรวจสอบว่าค่าในแถวปัจจุบันของคิวรีหลักไม่ได้เป็นส่วนหนึ่งของชุดที่คิวรีย่อยส่งกลับ

    ตัวอย่างเช่น คิวรีต่อไปนี้ส่งกลับรายการใบสั่งซื้อ (ที่มีวันที่สั่งซื้อ) ที่ประมวลผลโดยพนักงานที่ไม่ใช่พนักงานขาย:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    ด้วยการใช้ NOT IN คุณสามารถเขียนคิวรีเดียวกันได้ด้วยวิธีนี้:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

ด้านบนของหน้า

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ

ชุมชนช่วยให้คุณถามและตอบคําถาม ให้คําติชม และรับฟังจากผู้เชี่ยวชาญที่มีความรู้มากมาย

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

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

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

×