嵌套查询:将一查询快嵌套在另一个查询块的WHERE子句或HAVING短句的条件中的嵌套查询。
SQL语言允许多层嵌套查询,即一个子查询中还可以嵌套其他子查询。子查询的SELECT语句不能使用ORDER BY子句(ORDER BY 子句只能对最终结果进行排序)。
(所有需要操作的表都在这里建立:https://blog.csdn.net/qq_44647223/article/details/110249062)
1.带谓词IN的嵌套查询
select mat_num, speci, amount
from stock
where warehouse IN
( select warehouse
from stock
where speci='BVV-120' AND mat_name='护套绝缘电线'
);
2.带比较运算符的子查询
示例1:
select mat_num, speci, amount
from stock
where warehouse= /*查询的结果只有一个值,所以可以用 "=" 代替IN*/
( select AVG(amount)
from stock s2
where speci='BVV-120' AND mat_name='护套绝缘电线'
);
示例2:
select mat_num, mat_name, speci, amount
from stock s1
where amount >
( select AVG(amount)
from stock s2
where s2.warehouse = s1.warehouse
);
3.带有ANY或ALL谓词的子查询
比较运算符的语义
示例1:
查询比1#仓库的某一物资库存量少的记录
select mat_name, speci, amount
from stock
where warehouse <> '1#仓库'
AND amount < ANY
( select amount
from stock
where warehouse='1#仓库'
);
4.带有EXISTS谓语的子查询
EXISTS代表存在量词E。带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值TRUE或逻辑假值FALSE。
示例1:
查询使用m001号的工程项目
select prj_name
from test
where exists
( select *
from out_stock
where prj_num=test.prj_num AND mat_num='m001'
);