Sql简介 专题
专题目录
您的位置:database > Sql简介专题 > SQL Any运算符
SQL Any运算符
作者:--    发布时间:2019-11-20

在本教程中,您将了解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;

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

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

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;

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

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运算符通过将值与一组值进行比较来形成条件。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册