nIN引入的子查询 操作符IN,用来确定某个列值是否在内部查询的结果集中。 例:查询波士顿的供应商生产的产品名称和单 价。 首先,要知道哪些供应商是波士顿的,然后,通过波士顿的供应商编号查出相关的产品名称和单价。 SELECT ProductName , Unitprice FROM Products WHERE SupplierID IN (SELECT SupplierID FROM Suppliers WHERE City = 'Boston') 在操作符“IN”前可以加“NOT”取内部查询中相反的结果。 例:查询不是波士顿的供应商生产的产品信息。 SELECT ProductName , Unitprice FROM Products WHERE SupplierID NOT IN (SELECT SupplierID FROM Suppliers WHERE City = 'Boston') nEXISTS引入的子查询 EXISTS是测试子查询是否有数据行返回,如果有则返回TRUE,否则返回FALSE。NOT EXISTS 则相反,当结果表为空时,才返回TRUE。 例:查询波士顿的供应商生产的产品名 称和单价。 SELECT ProductName , Unitprice FROM Products WHERE EXISTS (SELECT SupplierID FROM Suppliers WHERE Products.SupplierID =Suppliers.SupplierID AND City = 'Boston') 例:使用“NOT EXISTS”查询不是波士顿的供应 商生产的产品名称和单价。 SELECT ProductName , Unitprice FROM Products WHERE NOT EXISTS (SELECT SupplierID FROM Suppliers WHERE Products.SupplierID =Suppliers.SupplierID AND City = 'Boston') n子查询和连接查询的比较 有些问题使用子查询解决会更简单,有些问题使用连接查询可以变得简单,因此要根据实际情况进行选择。 n当需要频繁地计算统计函数的值并将其作为外部查询的条件时,应该使用子查询。
评论