子查询中where查询条件要用IN(**在里面)关键字 或者=ANY(任意**)关键字,来表示值在这个子查询中。
注意:使用ANY/ALL谓词时必须同时使用比较运算符
>any | 大于子查询结果中的某个值 |
---|---|
<any | 小于子查询结果中的某个值 |
>=any | 大于等于子查询结果中的某个值 |
<=any | 小于等于子查询结果中的某个值 |
=any | 等于子查询结果中的某个值 |
!=any或<>any | 不等于子查询结果中的某个值 |
>all | 大于子查询结果中的所有值 |
<all | 小于子查询结果中的所有值 |
>=all | 大于等于子查询结果中的所有值 |
<=all | 小于等于子查询结果中的所有值 |
=all | 等于子查询结果中的所有值 |
!=all或<>all | 不等于子查询结果中的任何一个值 |
例子:
SELECT * FROM employees
WHERE DepartmentID = (SELECT DepartmentID FROM departments WHERE DepartmentName='财务部')
当子查询中的结果只有一条时,where的查询条件可以用=等号,否则会报错。需要用IN关键字
SELECT * FROM employees
WHERE employees.EmployeeID = (SELECT EmployeeID FROM salary WHERE InCome < 2500)
1242 - Subquery returns more than 1 row
子查询多于一行
要改为
SELECT * FROM employees
WHERE employees.EmployeeID IN (SELECT EmployeeID FROM salary WHERE InCome < 2500)
或者在子查询前加any关键字
SELECT * FROM employees
WHERE employees.EmployeeID =ANY(SELECT EmployeeID FROM salary WHERE InCome < 2500)