SELECT tb_book_author,tb_author_department,
(SELECT MAX(book_price) FROM tb_book
WHERE tb_book_author.tb_book_author = tb_book.tb_book_author) AS 价格
FROM tb_book_author;
查询结果如下图所示:
3、比较子查询
在 WHERE 子句中可以使用单行比较运算符来比较某个表达式与子查询的结果,可以使用的比较运算符包括:=、>、>=、<、<=、<>(或!=)等。这些比较运算符都可以连接一个子查询,且在使用 ALL 或者 ANY 修饰的比较运算符连接子查询时,必须保证子查询所返回的结果集合中只有单行数据,否则将引起查询错误。
【例2】应用比较运算符 >,查询商品信息表 goods 中 cat_id 的值大于品牌表 brand 中品牌名称为 蓝月亮 的商品信息。SQL 语句如下:
SELECT cat_id, goods_name
FROM goods
WHERE cat_id>(SELECT cat_id FROM brand WHERE name='蓝月亮');
查询结果如下图所示:
由于子查询只能返回一个值,因此,如果子查询的结果不是返回单个值,那么系统就会发出错误信息。
SELECT cat_id, goods_name
FROM goods
WHERE cat_id>(SELECT * FROM brand WHERE name='蓝月亮');
执行该 SQL 语句,如下图所示:
子查询中不能包含 ORDER BY 子句,看下面的 SQL 语句:
SELECT cat_id, goods_name
FROM goods
WHERE cat_id>(SELECT cat_id FROM brand WHERE name='蓝月亮' ORDER BY cat_id);
执行该 SQL 语句,如下图所示:
4、子查询中使用聚合函数
聚合函数 SUM()、COUNT()、MAX()、MIN() 和 AVG() 都返回单个值。在子查询中应用聚合函数,并将该函数返回的结果应用到 WHERE 子句的查询条件中。
【例3】应用聚合函数 AVG(求 emp 员工表中员工的平均工资,并将结果作为 WHERE 子句的查询条件,通过 SQL 语句获取工资大于平均工资的员工信息。SQL 语句如下:
SELECT ename, sal, job
FROM emp
WHERE sal > (SELECT AVG(sal) FROM emp);