1.基本查询回顾
第一题
第二题

第三题

年薪=12*工资+年终奖
第四题

第五题
第六题
第七题
第八题
2 多表查询
第一题
第二题

3.自连接


4.子查询
第一题
显示SMITH同一部门的员工
第二题
查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自
己的

这个代码报错的原因是
报错 ERROR 1242 (21000): Subquery returns more than 1 row 表示子查询返回了多行结果,而外层查询用 = 进行单值匹配,逻辑冲突。 解决方法:若需匹配子查询中任意一个职位,将 = 改为 IN ,语句修改为:

=:是一个比较运算符,用于判断某个值是否等于另一个值,要求精确匹配。它只能与单个值进行比较 ,当等号右边是子查询时,子查询必须只返回一行数据,否则会报错。
IN:用于判断某个值是否在一个指定的列表或者子查询结果集中,列表或子查询结果可以包含多个值。它可以处理多个可能的匹配情况,只要满足列表中的任意一个值,条件即为真。
其次在 SQL 中,AND 的优先级高于 IN 。
第三题

all关键字
与 SELECT 结合:表示返回所有符合条件的记录,默认情况下 SELECT 即隐含 ALL 行为(与 SELECT DISTINCT 相对,DISTINCT 会去除重复记录,而 ALL 会保留所有记录,包括重复项)。
与比较运算符结合:在子查询中,ALL 用于指定条件需满足子查询返回的所有值。例如 WHERE 列名 > ALL(子查询) 表示该列的值要大于子查询结果中的所有值。
第四题

ANY 的作用是判断 “表达式” 与子查询返回的任意一个值是否满足指定的比较条件。如果存在至少一个值满足条件,则整个表达式返回 TRUE;否则返回 FALSE。
第五题
查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人
这是因为 MySQL 中 “行构造器”(Row Constructor)的比较是严格按顺序、按列匹配的,字段顺序不同会导致匹配逻辑完全变化,具体分析如下:
第六题

第七题

5.合并查询
第一题
将工资大于2500或职位是MANAGER的人找出来
第二题
