如果两个表的共有字段,但对表1只知道该共有字段的描述,具体不明,要对两个各表进行查询,就需要用到子查询。
select O.PartNum,P.Description,O.Quantity from 订单 O,部件 P where O.PartNum=P.PartNum
and O.PartNum=(select PartNum from 部件 where Description='公路自行车');
在子查询中使用汇总函数
如AVG(),查询条件添加一个AND O.Quantity*P.Price>(select AVG(O.Quantity*P.Price)) from 订单 O,部件 P where O.PartNum=P.PartNum
子查询的嵌套
如果想给消费超过平均花费的客户发送一个特别通知,只需前面添加 select all C,NAME C.Address C.State C.ZIP from 客户 C where C.NAME in(上面的查询条件)
子查询中使用GROUP BY和 HAVING
select NAME,AVG(Quantity) Avarage from 订单 group by NAME
HAVING AVG(Quantity) >(select AVG(Quantity) from 订单); 括号内为数量的平均值,查询大于平均值的客户。
exists的使用,检查查询是否确实存在输出,从而实现对查询确实有结果才输出的控制。
还有ALL ANY SOME 这些关键字与IN的区别是,他们可以进行比较,如
select NAME from 订单 where NAME>ANY(select NAME from 订单 where NAME='JACK BIKE');
select NAME from 订单 where NAME<>ALL(select NAME from 订单 where NAME='JACK BIKE');输出名字不为JACK BIKE的所有记录