ใน SQL, ANY เป็นตัวดำเนินการที่ใช้เพื่อเปรียบเทียบค่ากับผลลัพธ์หลายค่า เช่น เมื่อเราต้องการตรวจสอบว่าค่าที่เราตรวจสอบตรงกับค่าใด ๆ ในเซ็ตของผลลัพธ์หรือไม่ โดย ANY จะทำงานร่วมกับคำสั่งเช่น SELECT, WHERE, หรือ HAVING ในการเปรียบเทียบค่า
โครงสร้างของ ANY Operator
expression operator ANY (subquery)
expressionคือค่าที่เราต้องการเปรียบเทียบoperatorคือเครื่องหมายเปรียบเทียบ เช่น=,<,>,<=,>=,<>subqueryเป็นคำสั่งย่อยที่ส่งผลลัพธ์ออกมาเป็นเซ็ตของค่าหลายค่า
สร้างตารางข้อมูลตัวอย่าง
ใช้คำสั่งต่อไปนี้เพื่อสร้างตารางข้อมูลตัวอย่าง
-- สร้างตาราง Employees
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
EmployeeName VARCHAR(100),
Salary DECIMAL(10, 2),
DepartmentID INT
);
-- สร้างตาราง Departments
CREATE TABLE Departments (
DepartmentID INT PRIMARY KEY,
DepartmentName VARCHAR(100)
);
-- แทรกข้อมูลตัวอย่างลงในตาราง Employees
INSERT INTO Employees (EmployeeID, EmployeeName, Salary, DepartmentID)
VALUES
(1, 'John Doe', 50000, 1),
(2, 'Jane Smith', 60000, 2),
(3, 'Jim Brown', 55000, 1),
(4, 'Jack White', 62000, 3);
-- แทรกข้อมูลตัวอย่างลงในตาราง Departments
INSERT INTO Departments (DepartmentID, DepartmentName)
VALUES
(1, 'HR'),
(2, 'IT'),
(3, 'Marketing');การใช้งาน ANY
การเปรียบเทียบเงินเดือนของพนักงาน
สมมุติว่าเราต้องการดูพนักงานที่มีเงินเดือนมากกว่าพนักงานคนใดคนหนึ่งในแผนก IT
SELECT EmployeeName, Salary
FROM Employees
WHERE Salary > ANY (SELECT Salary FROM Employees WHERE DepartmentID = 2);- คำสั่งนี้จะเลือกพนักงานที่มีเงินเดือนมากกว่าพนักงานคนใดคนหนึ่งในแผนก IT (
DepartmentID = 2) ANYจะเปรียบเทียบค่าเงินเดือนกับผลลัพธ์ที่ได้จากคำสั่งย่อย (subquery) ซึ่งคืนค่ากลับมาเป็นเซ็ตของเงินเดือนจากแผนก IT
ผลลัพธ์

การใช้ ANY กับเครื่องหมาย <
สมมุติว่าเราต้องการหาพนักงานที่มีเงินเดือนน้อยกว่าพนักงานคนใดคนหนึ่งในแผนก HR สามารถเขียนคำสั่งดังนี้
SELECT EmployeeName, Salary
FROM Employees
WHERE Salary < ANY (SELECT Salary FROM Employees WHERE DepartmentID = 1);- คำสั่งนี้จะคืนค่าพนักงานที่มีเงินเดือนน้อยกว่าพนักงานคนใดคนหนึ่ง ในแผนก HR (
DepartmentID = 1)
ผลลัพธ์

การใช้ ANY กับเครื่องหมาย = เพื่อหาค่าที่ตรงกับค่าใดค่าหนึ่ง
เราสามารถใช้ ANY เพื่อหาพนักงานที่มีเงินเดือนตรงกับพนักงานคนใดคนหนึ่ง ในแผนก HR หรือ IT ดังนี้
SELECT EmployeeName, Salary
FROM Employees
WHERE Salary = ANY (SELECT Salary FROM Employees WHERE DepartmentID IN (1, 2));- คำสั่งนี้จะเลือกพนักงานที่มีเงินเดือนตรงกับพนักงานในแผนก HR หรือ IT (
DepartmentID = 1 หรือ 2)
ผลลัพธ์

การใช้ ANY กับเครื่องหมาย <> (ไม่เท่ากับ)
เราสามารถใช้ ANY เพื่อหาพนักงานที่มีเงินเดือนไม่เท่ากับเงินเดือนของพนักงานคนใด ๆ ในแผนก Marketing
SELECT EmployeeName, Salary
FROM Employees
WHERE Salary <> ANY (SELECT Salary FROM Employees WHERE DepartmentID = 3);คำสั่งนี้จะเลือกพนักงานที่มีเงินเดือนไม่เท่ากับพนักงานคนใด ๆ ในแผนก Marketing (DepartmentID = 3)
ผลลัพธ์

สรุป
ANY Operator สามารถประยุกต์ใช้งานได้หลากหลายตามสถานการณ์ที่ต้องการเปรียบเทียบค่ากับชุดของผลลัพธ์ที่ได้จาก subquery โดยใช้เครื่องหมายเปรียบเทียบที่เหมาะสม เช่น =, >, <, หรือ <> นอกจากนี้ยังสามารถใช้กับชุดข้อมูลที่อยู่ในฐานข้อมูลเดียวกันได้โดยตรง
