SQL - ANY 和 ALL 运算符



SQL ANY 和 ALL 运算符用于在单个值和子查询返回的一系列值之间执行比较。

ANY 和 ALL 运算符必须以标准比较运算符(即 >、>=、<、<=、=、<>、!=)开头,后跟子查询。ANY 和 ALL 之间的主要区别在于,如果子查询中的任何值满足条件,则 ANY 返回 true,而如果子查询中的所有值都满足条件,则 ALL 返回 true。

SQL ANY 运算符

ANY 运算符用于验证查询的任何单个记录是否满足所需条件。

如果给定条件对范围内的任何值都满足,则此运算符返回 TRUE。如果指定范围内的任何值都不满足给定条件,则此运算符返回 false。您还可以将另一个查询(子查询)与该运算符一起使用。

语法

SQL - ANY 运算符的基本语法如下所示:

Column_name operator ANY (subquery);

其中,

  • column_name 是主查询中列的名称。

  • operator 是比较运算符,例如 =、<、>、<=、>= 或 <>。

  • subquery 是返回单个列值的 SELECT 语句。

ANY 与 '>' 运算符

通常,ANY 运算符用于将值与子查询返回的一组值进行比较,在这种情况下,我们可以将其与>(大于)运算符一起使用,以验证特定列值是否大于子查询返回的任何记录的列值。

示例

为了更好地理解它,让我们考虑 CUSTOMERS 表,该表包含客户的个人详细信息,包括他们的姓名、年龄、地址和薪水等,如下所示:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),       
   PRIMARY KEY (ID)
); 

现在,使用 INSERT 语句将值插入此表,如下所示:

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

表将创建如下:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

现在,让我们列出所有 CUSTOMERS 的详细信息,其薪水大于年龄为 32 的任何客户的薪水,在本例中为 Chaitali、Hardik、Komal 和 Muffy:

SELECT * FROM CUSTOMERS 
WHERE SALARY > ANY (SELECT SALARY FROM CUSTOMERS WHERE AGE = 32);

输出

获得的结果如下:

ID 姓名 年龄 地址 薪水
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

ANY 与 '<' 运算符

类似于'>'运算符,我们可以将'<'(小于)运算符与 ANY 一起使用,以验证特定列值是否小于子查询返回的任何记录的列值。

示例

在这里,我们查找具有任何薪水小于先前创建的 CUSTOMERS 表中所有客户的平均薪水的客户的不同/不同的年龄:

SELECT DISTINCT AGE FROM CUSTOMERS 
WHERE SALARY < ANY (SELECT AVG(SALARY) FROM CUSTOMERS);

输出

执行上述查询时,我们将获得以下输出:

年龄
32
25
23
22

ANY 与 '=' 运算符

当我们将=(等于)运算符与 ANY 一起使用时,它会验证特定列值是否等于子查询返回的任何记录的列值。

示例

在下面给出的查询中,我们检索所有客户的详细信息,其年龄等于姓名以“K”开头的任何客户的年龄:

SELECT * FROM CUSTOMERS 
WHERE AGE = ANY (SELECT AGE FROM CUSTOMERS WHERE NAME LIKE 'K%');

输出

产生的结果如下:

ID 姓名 年龄 地址 薪水
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
6 Komal 22 Hyderabad 4500.00

SQL ALL 运算符

SQL ALL 运算符返回 SELECT 语句的所有记录。

  • 如果给定条件对范围内的所有值都满足,则返回 TRUE。

  • 它始终返回布尔值。

  • 它用于 SQL 查询中的 SELECT、WHERE 和 HAVING 语句。

  • 子查询返回的值的数据类型必须与外部查询表达式的数

语法

SQL ALL 运算符的基本语法如下:

Column_name operator ALL (subquery);

其中,

  • column_name - 是主查询中列的名称。

  • operator - 是比较运算符,例如 =、<、>、<=、>= 或 <>。

  • subquery - 是返回单个列值的 SELECT 语句。

ALL 与 WHERE 语句

当我们将 ALL 运算符与 WHERE 子句一起使用时,它会根据指定的条件筛选子查询的结果。

SQL 中的 WHERE 子句用于根据特定条件筛选查询中的行。它对表中的各个行进行操作,并且允许您指定数据返回的查询中的每一行必须满足的条件。

示例

如果我们考虑上面创建的 CUSTOMERS 表,则以下查询将返回所有客户的详细信息,其薪水不等于年龄为 25 的任何客户的薪水:

SELECT * FROM CUSTOMERS 
WHERE SALARY <> 
ALL (SELECT SALARY FROM CUSTOMERS WHERE AGE = 25);

输出

上述查询的输出如下:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
3 Kaushik 23 Kota 2000.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

ALL 与 HAVING 子句

在 SQL 中,ALL 运算符还可以与 HAVING 子句一起使用,以根据应用于组中所有聚合值的条件筛选 GROUP BY 查询的结果。

示例

以下 SQL 查询用于获取所有客户的详细信息,其薪水小于平均薪水:

SELECT NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS 
GROUP BY AGE, SALARY 
HAVING SALARY < ALL (SELECT AVG(SALARY) FROM CUSTOMERS);

输出

上述查询的输出如下:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
6 Komal 22 Hyderabad 4500.00
广告