Sql 简明教程

SQL - ANY, ALL Operators

SQL ANY and ALL 运算符用于执行单一值与子查询返回的值的范围之间的比较。

The SQL ANY Operator

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

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

Syntax

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

Column_name operator ANY (subquery);

其中,

  1. column_name 是主查询中某一列的名称。

  2. operator 是一个比较运算符,例如 =、<、>、⇐、>= 或 <>.

  3. subquery 是一个选择语句,可返回单个值列。

ANY with '>' Operator

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

Example

为了更好地理解它,让我们考虑一下 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

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

Hyderabad

4500.00

7

Muffy

24

Indore

10000.00

现在,让我们列出所有 SALARY 为 greater than 的客户的详细信息,即在这个案例中 AGE 为 32 的客户的 SALARY,即 Chaitali、Hardik、Komal 和 Muffy:

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

Output

获得的结果如下 −

ID

NAME

AGE

ADDRESS

SALARY

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 with '<' Operator

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

Example

在此处,我们正在查找拥有 SALARY less than 所有客户的平均工资的客户的不同年龄/年龄,这些客户以前从创建的 CUSTOMERS 表中得到过工资:

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

Output

在执行上述查询时,我们会得到以下输出:

AGE

32

25

23

22

ANY with '=' Operator

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

Example

在下面给出的查询中,我们正在检索所有年龄为 equal to 的客户的详细信息,即名称以 'K' 开头的任何客户的年龄:

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

Output

产生的结果如下 −

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

Hyderabad

4500.00

The SQL ALL Operator

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

  1. 如果给定条件满足范围内的所有值,它将返回 TRUE。

  2. 它始终返回一个布尔值。

  3. 它用于 SQL 查询中 SELECT、WHERE 和 HAVING 语句。

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

Syntax

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

Column_name operator ALL (subquery);

其中,

  1. column_name − 是主查询中列的名称。

  2. operator − 是一个比较运算符,例如 =、<、>、⇐、>= 或 <>.

  3. subquery − 是一条返回单列值的 SELECT 语句。

ALL with WHERE Statement

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

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

Example

如果考虑上面创建的 CUSTOMERS 表,以下查询返回工资为 not equal to 所有客户的详细信息(年龄为 25 的客户的工资 −

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

Output

以上查询的输出如下 −

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

Hyderabad

4500.00

7

Muffy

24

Indore

10000.00

ALL with HAVING Clause

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

Example

以下 SQL 查询用于获取工资为 less than 所有客户的详细信息(平均工资 −

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

Output

以上查询的输出如下 −

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

Kaushik

23

Kota

2000.00

6

Komal

22

Hyderabad

4500.00