ฉันพยายามเรียนรู้ SQL และมีปัญหาในการทำความเข้าใจคำสั่ง EXISTS ฉันเจอคำพูดนี้เกี่ยวกับ "มีอยู่จริง" และไม่เข้าใจบางอย่าง:
การใช้โอเปอเรเตอร์ที่มีอยู่แบบสอบถามย่อยของคุณสามารถส่งคืนค่าศูนย์หนึ่งแถวหรือหลายแถวและเงื่อนไขจะตรวจสอบว่าแบบสอบถามย่อยส่งคืนแถวใด ๆ หรือไม่ หากคุณดูที่ส่วนคำสั่ง select ของเคียวรีย่อยคุณจะเห็นว่าประกอบด้วยลิเทอรัลเดียว (1); เนื่องจากเงื่อนไขในแบบสอบถามที่มีเพียงต้องการทราบว่ามีการส่งคืนแถวจำนวนเท่าใดข้อมูลจริงที่แบบสอบถามย่อยที่ส่งกลับจึงไม่เกี่ยวข้อง
สิ่งที่ฉันไม่เข้าใจคือแบบสอบถามภายนอกรู้ได้อย่างไรว่าแบบสอบถามย่อยกำลังตรวจสอบแถวใด ตัวอย่างเช่น:
SELECT *
FROM suppliers
WHERE EXISTS (select *
from orders
where suppliers.supplier_id = orders.supplier_id);
ฉันเข้าใจว่าหากรหัสจากซัพพลายเออร์และตารางคำสั่งซื้อตรงกันคำค้นหาย่อยจะส่งคืนจริงและคอลัมน์ทั้งหมดจากแถวที่ตรงกันในตารางของซัพพลายเออร์จะถูกส่งออก สิ่งที่ฉันไม่ได้รับคือวิธีที่แบบสอบถามย่อยสื่อสารว่าควรพิมพ์แถวใด (เช่นแถวที่มีรหัสซัพพลายเออร์ 25) หากส่งคืนเฉพาะจริงหรือเท็จ
สำหรับฉันแล้วดูเหมือนว่าไม่มีความสัมพันธ์ระหว่างแบบสอบถามภายนอกและแบบสอบถามย่อย