SQL ANY, ALL运算符

SQL ANY, ALL运算符

在SQL中,运算符的意义与数学运算符相同。它们是用于执行比较或逻辑操作的关键字。在SQL中,有四种类型的运算符。算术运算符、比较运算符、逻辑运算符和位运算符。

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 (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );

表格将如下所示创建-

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  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 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

现在,让我们尝试列举出工资大于32岁顾客的任何顾客的工资详细信息,即在这种情况下是Chaitali,Hardik,Komal和Muffy。

select * from customers
WHERE SALARY > ANY (select SALARY from CUSTOMERS where AGE = 32);

输出

得到的结果如下:

+----+----------+-----+---------+----------+
| ID | NAME     | AGE | ADDRESS | SALARY   |
+----+----------+-----+---------+----------+
|  4 | Chaitali |  25 | Mumbai  |  6500.00 |
|  5 | Hardik   |  27 | Bhopal  |  8500.00 |
|  6 | Komal    |  22 | MP      |  4500.00 |
|  7 | Muffy    |  24 | Indore  | 10000.00 |
+----+----------+-----+---------+----------+

使用<运算符的ANY

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

示例

在这里,我们试图找到在CUSTOMERS表中先前创建的任何薪水 小于 所有顾客薪水的平均薪水的不同年龄的客户。

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

输出

在执行上述查询时,我们得到以下输出结果 −

+-----+
| AGE |
+-----+
|  22 |
|  23 |
|  25 |
|  32 |
+-----+

任何与 = 运算符

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

示例

在下面的查询中,我们尝试返回所有年龄 等于 以“K”开头的任何客户姓名的客户的详细信息。

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

输出

生成的结果如下 –

+----+----------+-----+---------+---------+
| ID | NAME     | AGE | ADDRESS | SALARY  |
+----+----------+-----+---------+---------+
|  2 | Khilan   |  25 | Delhi   | 1500.00 |
|  3 | kaushik  |  23 | Kota    | 2000.00 |
|  4 | Chaitali |  25 | Mumbai  | 6500.00 |
|  6 | Komal    |  22 | MP      | 4500.00 |
+----+----------+-----+---------+---------+

SQL – ALL运算符

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

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

  • 它总是返回一个布尔值。

  • 它与SQL查询中的SELECT,WHERE和HAVING语句一起使用。

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

语法

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

Column_name operator ALL (subquery)

其中,

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

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

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

现在,让我们看一些SQL – ALL运算符的示例。

带WHERE语句的ALL

当我们在WHERE子句中使用ALL运算符时,它根据指定的条件过滤子查询的结果。

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

示例

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

select * from CUSTOMERS where SALARY <> ALL (select SALARY from CUSTOMERS where AGE = 25);

输出

上述查询的输出如下所示:

+----+---------+-----+-----------+----------+
| ID | NAME    | AGE | ADDRESS   | SALARY   |
+----+---------+-----+-----------+----------+
|  1 | Ramesh  |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik |  23 | Kota      |  2000.00 |
|  5 | Hardik  |  27 | Bhopal    |  8500.00 |
|  6 | Komal   |  22 | MP        |  4500.00 |
|  7 | Muffy   |  24 | Indore    | 10000.00 |
+----+---------+-----+-----------+----------+

全部使用HAVING语句

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

示例

以下SQL查询用于获取工资 小于 平均工资的所有客户的详细信息 –

select NAME, AGE, ADDRESS, SALARY from CUSTOMERS
GROUP BY NAME, AGE, ADDRESS, SALARY
HAVING SALARY < ALL (SELECT avg(SALARY) from CUSTOMERS);

输出

上述查询的输出结果如下:

+---------+-----+-----------+---------+
| NAME    | AGE | ADDRESS   | SALARY  |
+---------+-----+-----------+---------+
| kaushik |  23 | Kota      | 2000.00 |
| Khilan  |  25 | Delhi     | 1500.00 |
| Komal   |  22 | MP        | 4500.00 |
| Ramesh  |  32 | Ahmedabad | 2000.00 |
+---------+-----+-----------+---------+

注意 − 在SQL Server中,每当使用聚合函数时,SELECT语句中使用的表的所有列都必须在GROUP BY子句中出现,以根据使用的聚合函数对表进行汇总。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程