ANY และ ALL Operators


ANY และ ALL operators ช่วยให้คุณสามารถเปรียบเทียบระหว่างค่าคอลัมน์เดียวกับช่วงของค่าอื่นๆ ได้

ANY operator:

  • ส่งกลับค่า boolean เป็นผล
  • ส่งคืน TRUE หากค่าแบบสอบถามย่อยใดๆ ตรงตามเงื่อนไข

ANY หมายความว่าเงื่อนไขจะเป็นจริงหากการดำเนินการเป็นจริงสำหรับค่าใดๆ ใน range

ANY Syntax

SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY
  (SELECT column_name
  FROM table_name
  WHERE condition);

หมายเหตุ:ตัวดำเนินการจะต้องเป็นตัวดำเนินการเปรียบเทียบมาตรฐาน (=, <>, !=, >, >=, <, หรือ <=)


ALLoperator:

  • ส่งกลับค่าบูลีนเป็นผล
  • คืนค่า TRUE หากค่าแบบสอบถามย่อยทั้งหมดตรงตามเงื่อนไข
  • ใช้กับคำสั่ง SELECT WHERE และ HAVING

ALL หมายความว่าเงื่อนไขจะเป็นจริงก็ต่อเมื่อการดำเนินการค่าทั้งหมดใน range เป็นจริง

ALL Syntax With SELECT

SELECT ALL column_name(s)
FROM table_name
WHERE condition;

ALL Syntax ใช้กับ WHERE หรือ HAVING

SELECT column_name(s)
FROM table_name
WHERE column_name operator ALL
  (SELECT column_name
  FROM table_name
  WHERE condition);

หมายเหตุ:ตัวดำเนินการจะต้องเป็นตัวดำเนินการเปรียบเทียบมาตรฐาน (=, <>, !=, >, >=, <, หรือ <=)


Demo Database

ด้านล่างนี้คือการเลือกจาก ตาราง Products ในฐานข้อมูลตัวอย่าง Northwind:

ProductIDProductNameSupplierIDCategoryIDUnitPrice
1Chais1110 boxes x 20 bags18
2Chang1124 – 12 oz bottles19
3Aniseed Syrup1212 – 550 ml bottles10
4Chef Anton’s Cajun Seasoning2248 – 6 oz jars22
5Chef Anton’s Gumbo Mix2236 boxes21.35
6Grandma’s Boysenberry Spread3212 – 8 oz jars25
7Uncle Bob’s Organic Dried Pears3712 – 1 lb pkgs.30
8Northwoods Cranberry Sauce3212 – 12 oz jars40
9Mishi Kobe Niku4618 – 500 g pkgs.97

และการเลือกฐานข้อมูลตัวอย่างจากตาราง “OrderDetails” :

OrderDetailIDOrderIDProductIDQuantity
1102481112
2102484210
310248725
410249149
5102495140
6102504110
7102505135
8102506515
910251226
10102515715


ตัวอย่าง SQL ANY

คำสั่ง SQL ต่อไปนี้แสดงรายการ ProductName หากพบเรคคอร์ดใดในตาราง OrderDetails มีจำนวนเท่ากับ 10 (ซึ่งจะคืนค่า TRUE เนื่องจากคอลัมน์ปริมาณมีค่าบางค่าเป็น 10)

ตัวอย่าง

SELECT ProductName 
FROM Products
WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);

คำสั่ง SQL ต่อไปนี้แสดงรายการ ProductName หากพบเรคคอร์ดใดในตาราง OrderDetails มีจำนวนมากกว่า 99 (ซึ่งจะคืนค่า TRUE เนื่องจากคอลัมน์ปริมาณมีค่าบางค่าที่มากกว่า 99)

ตัวอย่าง

SELECT ProductName
FROM Products
WHERE ProductID = ANY
  (SELECT ProductID
  FROM OrderDetails
  WHERE Quantity > 99);

คำสั่ง SQL ต่อไปนี้แสดงรายการ ProductName หากพบเรคคอร์ดใดในตาราง OrderDetails มีจำนวนมากกว่า 1,000 (ซึ่งจะคืนค่า FALSE เนื่องจากคอลัมน์ปริมาณไม่มีค่าที่มากกว่า 1,000)

ตัวอย่าง

SELECT ProductName
FROM Products
WHERE ProductID = ANY
  (SELECT ProductID
  FROM OrderDetails
  WHERE Quantity > 1000);


ตัวอย่าง SQL ALL

คำสั่ง SQL ต่อไปนี้แสดงรายการชื่อผลิตภัณฑ์ทั้งหมด:

ตัวอย่าง

SELECT ALL ProductName
FROM Products
WHERE TRUE;

คำสั่ง SQL ต่อไปนี้จะแสดงรายการ ProductName ถ้าระเบียนทั้งหมดในตาราง OrderDetails มีจำนวนเท่ากับ 10 ซึ่งแน่นอนว่าจะส่งคืนค่า FALSE เนื่องจากคอลัมน์ปริมาณมีค่าที่แตกต่างกันมากมาย (ไม่ใช่แค่ค่า 10 เท่านั้น)

ตัวอย่าง

SELECT ProductName 
FROM Products
WHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);