SQL学习笔记03 极客时间 SQL必知必会50讲

07丨什么是SQL函数?为什么使用SQL函数可能会带来问题?

SQL学习笔记03 极客时间 SQL必知必会50讲

08丨什么是SQL的聚集函数,如何利用它们汇总表的数据?

SQL学习笔记03 极客时间 SQL必知必会50讲

09丨子查询:子查询的种类都有哪些,如何提高子查询的性能?

SQL学习笔记03 极客时间 SQL必知必会50讲

我今天讲解了子查询的使用,其中讲到了 EXISTS 和 IN 子查询效率的比较,当查询字段进行了索引时,主表 A 大于从表 B,使用 IN 子查询效率更高,相反主表 A 小于从表 B 时,使用 EXISTS 子查询效率更高,同样,如果使用 NOT IN 子查询和 NOT EXISTS 子查询,在什么情况下,哪个效率更高呢?

今天的作业,水平太低,无法理解

SQL学习笔记03 极客时间 SQL必知必会50讲

1. SELECT
player_id,
team_id,
player_name
FROM
player a
WHERE
EXISTS ( SELECT b.player_id FROM player_score b GROUP BY b.player_id HAVING AVG( b.score ) > 20 and a.player_id = b.player_id);
2.SELECT
player_id,
team_id,
player_name
FROM
player a
WHERE
EXISTS ( SELECT b.player_id FROM player_score b WHERE a.player_id = b.player_id GROUP BY b.player_id HAVING AVG( b.score ) > 20);
3.SELECT
player_id,
team_id,
player_name
FROM
player
WHERE
player_id IN ( SELECT player_id FROM player_score GROUP BY player_id HAVING AVG( score ) > 20 );
推荐3,因为子查询只会执行一次。2比1好,因为where会先过滤数据行,然后分组,然后对分组过滤。