การซ้อนคิวรีภายในคิวรีอื่นหรือในนิพจน์โดยใช้คิวรีย่อย

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

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

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

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

ในบทความนี้

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

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

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

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

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

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

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

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

แสดงวิธีตั้งค่า Northwind ให้ฉันดูหน่อย

  1. บนแท็บ ไฟล์ ให้คลิก สร้าง

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

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

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

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

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

    Interval: [Order Date]-[Prior Date]

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

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

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

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

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

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

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

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

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

  1. เปิดฐานข้อมูล Northwind และเปิดใช้งานเนื้อหา

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

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

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

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

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

  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 ของเรา

×