การซ้อนแบบสอบถามภายในแบบสอบถามอื่นหรือในนิพจน์โดยใช้แบบสอบถามย่อย

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

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

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

In this article

การใช้ผลลัพธ์ของแบบสอบถามเป็นเขตข้อมูลในแบบสอบถามอื่น

การใช้แบบสอบถามย่อยเป็นเกณฑ์สำหรับเขตข้อมูลของแบบสอบถาม

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

การใช้ผลลัพธ์ของแบบสอบถามเป็นเขตข้อมูลในแบบสอบถามอื่น

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

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

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

แสดงวิธีตั้งค่า Northwind 2007

  1. คลิก ปุ่ม Microsoft Office รูปปุ่ม แล้วคลิก สร้าง

  2. ในบานหน้าต่างงานด้านซ้าย ใต้ ประเภทแม่แบบ ให้คลิก แม่แบบบนเครื่อง

  3. ใต้ แม่แบบบนเครื่อง คลิก Northwind 2007 จากนั้นคลิก สร้าง

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

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

  2. ในกล่องโต้ตอบ แสดงตาราง ให้คลิกแท็บ แบบสอบถาม แล้วคลิกสองครั้งที่ ใบสั่งซื้อผลิตภัณฑ์

  3. ปิดกล่องโต้ตอบ แสดงตาราง

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

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

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

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

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

    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 ในการสร้างนามแฝงของตาราง เพื่อที่คุณจะสามารถเปรียบเทียบค่าในแบสอบถามย่อยกับค่าในแถวปัจจุบันของแบบสอบถามหลักได้

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

Interval: [Order Date]-[Prior Date]

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

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

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

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

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

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

การใช้แบบสอบถามย่อยเป็นเกณฑ์สำหรับเขตข้อมูลของแบบสอบถาม

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

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

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

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

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

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

  5. ปิดกล่องโต้ตอบ แสดงตาราง

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

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

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

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

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

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

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

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

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

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

หมายเหตุ: รายการนี้ไม่ใช่รายการที่ละเอียดครบถ้วนทุกกรณี คุณสามารถใช้คำสำคัญ SQL ใดๆ ในแบบสอบถามย่อย แต่ไม่รวมคำสำคัญคำจำกัดความข้อมูล

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

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

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

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

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

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

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

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

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

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

×