Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

แบบสอบถามย่อยแถวเดียวและหลายแถวคืออะไร


แบบสอบถามย่อยแถวเดียว

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

ในการสืบค้น SELECT ด้านล่าง MySQL ภายในจะส่งกลับเพียงแถวเดียว นั่นคือ เงินเดือนขั้นต่ำสำหรับบริษัท ในทางกลับกัน ใช้ค่านี้เพื่อเปรียบเทียบเงินเดือนของพนักงานทั้งหมด และแสดงเฉพาะเงินเดือนที่มีเงินเดือนเท่ากับเงินเดือนขั้นต่ำ

SELECT first_name, salary, department_id
FROM employees
WHERE salary = (SELECT MIN (salary)
FROM employees);

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

SELECT department_id, MIN (salary)
FROM employees
GROUP BY department_id
HAVING MIN (salary) < (SELECT AVG (salary)
FROM employees)

แบบสอบถามย่อยหลายแถว

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

SELECT first_name, department_id FROM employees WHERE department_id = (SELECT department_id FROM employees WHERE LOCATION_ID = 100)