【精品】关系数据库标准语言SQL.ppt
文本预览下载声明
等价于 SELECT custName, custPhone FROM Customer WHERE custID IN (SELECT custID FROM Order WHERE orderID=1) 【例3.44】 查询比4号订单的订单金额还高的订单编号和客户编号。 SELECT orderID, custID FROM Order WHERE orderAmount (SELECT orderAmount FROM Order WHERE orderID=4) 不相关子查询 子查询的查询条件不依赖于父查询。 求解方法: 由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。 SELECT custName, custPhone 外层查询/父查询 FROM Customer WHERE custID IN (SELECT custID 内层查询/子查询 FROM Order WHERE orderID=1) 2.返回多值的子查询 使用ALL、ANY等谓词 ANY:任意一个值 ALL:所有值 需要配合使用比较运算符 ANY 大于子查询结果中的某个值 ALL 大于子查询结果中的所有值 ANY 小于子查询结果中的某个值 ALL 小于子查询结果中的所有值 = ANY 大于等于子查询结果中的某个值 = ALL 大于等于子查询结果中的所有值 = ANY 小于等于子查询结果中的某个值 = ALL 小于等于子查询结果中的所有值 = ANY 等于子查询结果中的某个值 =ALL 等于子查询结果中的所有值(通常没有实际意义) !=(或)ANY 不等于子查询结果中的某个值 !=(或)ALL 不等于子查询结果中的任何一个值 【例3.45】 查询比所有“天津南生”的商品价格都高的商品信息。 SELECT * FROM Product WHERE pdPriceALL (SELECT pdPrice FROM Product WHERE pdSupplier=天津南生) 等价于 SELECT * FROM Product WHERE pdPrice (SELECT MAX(pdPrice) FROM Product WHERE pdSupplier=天津南生) 【例3.46】 查询至少比“上海双喜”一种商品价格低的商品信息。 SELECT * FROM Product WHERE pdPriceANY (SELECT pdPrice FROM Product WHERE pdSupplier=上海双喜) 等价于 : SELECT * FROM Product WHERE pdPrice (SELECT MAX(pdPrice) FROM Product WHERE pdSupplier=天津南生) 【例3.47】 查询至少订购了“上海双喜”一种商品的订单编号。 SELECT DISTINCT orderID FROM OrderDetail WHERE pdID=ANY (SELECT pdID FROM Product WHERE pdSupplier=上海双喜) 等价于 SELECT DISTINCT orderID FROM OrderDetail WHERE pdID IN (SELECT pdID FROM Product WHERE pdSupplier=上海双喜) ANY与ALL和聚集函数的对应关系 ANY和ALL谓词有时可以用聚集函数实现 用聚集函数实现子查询通常比直接用ANY或ALL查询效率要高,因为前者通常能够减少比较次数 ? = 或!= = = ANY IN -- MAX =MAX MIN = MIN ALL --
显示全部