mysql any运算符_SQL Any运算符

在本教程中,您将了解SQL ANY运算符以及如何使用它来将值与一组值进行比较。

1. SQL ANY运算符简介

ANY运算符是一个逻辑运算符,它将值与子查询返回的一组值进行比较。 ANY运算符必须以比较运算符:>,>=,开头,后跟子查询。

以下是ANY运算符的语法:

WHERE column_name comparison_operator ANY (subquery)

如果子查询不返回任何行,则条件的计算结果为false。 假设子查询不返回零行,下面说明了ANY运算符与每个比较运算符一起使用时的含义:

条件

表示含义

x = ANY (…)

c列中的值必须与集合中的一个或多个值匹配,以评估为true。

x != ANY (…)

c列中的值不能与集合中的一个或多个值匹配以评估为true。

x > ANY (…)

c列中的值必须大于要评估为true的集合中的最小值。

x < ANY (…)

c列中的值必须小于要评估为true的集合中的最大值。

x >= ANY (…)

c列中的值必须大于或等于要评估为true的集合中的最小值。

x <= ANY (…)

c列中的值必须小于或等于要评估为true的集合中的最大值。

2. SQL ANY示例

在下面示例中,我们将使用示例数据库中的employees表:

mysql> DESC employees;

+---------------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+---------------+--------------+------+-----+---------+----------------+

| employee_id | int(11) | NO | PRI | NULL | auto_increment |

| first_name | varchar(20) | YES | | NULL | |

| last_name | varchar(25) | NO | | NULL | |

| email | varchar(100) | NO | | NULL | |

| phone_number | varchar(20) | YES | | NULL | |

| hire_date | date | NO | | NULL | |

| job_id | int(11) | NO | MUL | NULL | |

| salary | decimal(8,2) | NO | | NULL | |

| manager_id | int(11) | YES | MUL | NULL | |

| department_id | int(11) | YES | MUL | NULL | |

+---------------+--------------+------+-----+---------+----------------+

10 rows in set

2.1. SQL ANY等于运算符示例

以下语句使用AVG()函数和GROUP BY子句来查找每个部门的平均工资:

SELECT

ROUND(AVG(salary), 2)

FROM

employees

GROUP BY

department_id

ORDER BY

AVG(salary) DESC;

执行上面示例代码,得到以下结果:

rMRj6n.png

要查找工资等于所在部门平均工资的所有员工,请使用以下查询:

SELECT

first_name,

last_name,

salary

FROM

employees

WHERE

salary = ANY (

SELECT

AVG(salary)

FROM

employees

GROUP BY

department_id)

ORDER BY

first_name,

last_name,

salary;

执行上面示例代码,得到以下结果:

ia26Jf.png

2.2. SQL ANY与不等于运算符的示例

同样,以下查询查找工资不等于每个部门平均工资的所有员工:

SELECT

first_name,

last_name,

salary

FROM

employees

WHERE

salary <> ANY (SELECT

AVG(salary)

FROM

employees

GROUP BY department_id)

ORDER BY

first_name,

last_name,

salary;

执行上面示例代码,得到以下结果:

+------------+-----------+--------+

| first_name | last_name | salary |

+------------+-----------+--------+

| Alexander | Lee | 9000 |

| Alexander | Su | 3100 |

| Avg | Su | 11000 |

| Britney | Zhao | 3900 |

... ...

| Sigal | Zhang | 2800 |

| Steven | Lee | 24000 |

| Susan | Zhou | 6500 |

| Valli | Chen | 4800 |

| William | Wu | 8300 |

+------------+-----------+--------+

40 rows in set

2.3. SQL ANY和大于运算符的示例

以下查询查找薪水大于每个部门平均薪水的所有员工:

SELECT

first_name,

last_name,

salary

FROM

employees

WHERE

salary > ANY (SELECT

AVG(salary)

FROM

employees

GROUP BY department_id)

ORDER BY

salary;

执行上面查询语句,得到以下结果 –

+------------+-----------+--------+

| first_name | last_name | salary |

+------------+-----------+--------+

| Diana | Chen | 4200 |

| Jennifer | Zhao | 4400 |

| David | Liang | 4800 |

| Valli | Chen | 4800 |

| Bruce | Wong | 6000 |

| Pat | Zhou | 6000 |

| Charles | Yang | 6200 |

| Shanta | Liu | 6500 |

... ...

| Karen | Liu | 13500 |

| John | Liu | 14000 |

| Neena | Wong | 17000 |

| Lex | Liang | 17000 |

| Steven | Lee | 24000 |

+------------+-----------+--------+

32 rows in set

请注意,最低平均工资是4150。 上面的查询返回薪水大于最低薪水的所有员工。

2.4. SQL ANY使用大于或等于运算符示例

以下语句将返回薪水大于或等于每个部门平均薪水的所有员工:

SELECT

first_name,

last_name,

salary

FROM

employees

WHERE

salary >= ANY (SELECT

AVG(salary)

FROM

employees

GROUP BY department_id)

ORDER BY first_name , last_name , salary;

执行上面查询语句,得到以下结果 –

+------------+-----------+--------+

| first_name | last_name | salary |

+------------+-----------+--------+

| Alexander | Lee | 9000 |

| Avg | Su | 11000 |

| Bruce | Wong | 6000 |

| Charles | Yang | 6200 |

| Daniel | Chen | 9000 |

| David | Liang | 4800 |

| Diana | Chen | 4200 |

| Hermann | Wu | 10000 |

... ...

| Pat | Zhou | 6000 |

| Shanta | Liu | 6500 |

| Shelley | Wu | 12000 |

| Steven | Lee | 24000 |

| Susan | Zhou | 6500 |

| Valli | Chen | 4800 |

| William | Wu | 8300 |

+------------+-----------+--------+

32 rows in set

2.5. SQL ANY使用小于运算符的示例

以下查询查找薪水低于每个部门平均薪水的所有员工:

SELECT

first_name,

last_name,

salary

FROM

employees

WHERE

salary < ANY (SELECT

AVG(salary)

FROM

employees

GROUP BY department_id)

ORDER BY salary DESC;

执行上面查询语句,得到以下结果 –

+------------+-----------+--------+

| first_name | last_name | salary |

+------------+-----------+--------+

| Neena | Wong | 17000 |

| Lex | Liang | 17000 |

| John | Liu | 14000 |

| Karen | Liu | 13500 |

| Michael | Zhou | 13000 |

| Nancy | Chen | 12000 |

| Shelley | Wu | 12000 |

... ...

| Alexander | Su | 3100 |

| Shelli | Zhang | 2900 |

| Sigal | Zhang | 2800 |

| Irene | Liu | 2700 |

| Guy | Zhang | 2600 |

| Karen | Zhang | 2500 |

+------------+-----------+--------+

39 rows in set

在此示例中,员工的工资小于每个部门的最高平均工资:

2.6. SQL ANY使用小于或等于运算符示例

要查找工资小于或等于每个部门平均工资的员工,请使用以下查询:

SELECT

first_name,

last_name,

salary

FROM

employees

WHERE

salary <= ANY (SELECT

AVG(salary)

FROM

employees

GROUP BY department_id)

ORDER BY salary DESC;

执行上面查询语句,得到以下结果 –

+------------+-----------+--------+

| first_name | last_name | salary |

+------------+-----------+--------+

| Neena | Wong | 17000 |

| Lex | Liang | 17000 |

| John | Liu | 14000 |

| Karen | Liu | 13500 |

| Michael | Zhou | 13000 |

| Nancy | Chen | 12000 |

| Shelley | Wu | 12000 |

... ...

| Alexander | Su | 3100 |

| Shelli | Zhang | 2900 |

| Sigal | Zhang | 2800 |

| Irene | Liu | 2700 |

| Guy | Zhang | 2600 |

| Karen | Zhang | 2500 |

+------------+-----------+--------+

39 rows in set

如上结果所示,结果集包括员工的工资低于或等于每个部门的最高平均工资。

现在,您应该知道如何使用SQL ANY运算符通过将值与一组值进行比较来形成条件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值