MySql 复合查询

1.基本查询回顾

第一题
查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J

第二题
按照部门号升序而雇员的工资降序排序
第三题
使用年薪进行降序排序

年薪=12*工资+年终奖

第四题
显示工资最高的员工的名字和工作岗位
第五题
显示工资高于平均工资的员工信息

第六题
显示每个部门的平均工资和最高工资

第七题
显示平均工资低于2000的部门号和它的平均工资

第八题
显示每种岗位的雇员总数,平均工资

2 多表查询

第一题
我们只要emp表中的deptno = dept表中的deptno字段的记录

第二题
显示部门号为10的部门名,员工名和工资

3.自连接

自连接是指在同一张表连接查询
自连接要取别名才能实现 无法直接实现

4.子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
第一题       

                                                                                                                                       

显示SMITH同一部门的员工

第二题

查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10

己的

这个代码报错的原因是

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

=:是一个比较运算符,用于判断某个值是否等于另一个值,要求精确匹配。它只能与单个值进行比较 ,当等号右边是子查询时,子查询必须只返回一行数据,否则会报错。

IN:用于判断某个值是否在一个指定的列表或者子查询结果集中,列表或子查询结果可以包含多个值。它可以处理多个可能的匹配情况,只要满足列表中的任意一个值,条件即为真。

其次在 SQL 中,AND 的优先级高于 IN 。

第三题
显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号

all关键字

与 SELECT 结合:表示返回所有符合条件的记录,默认情况下 SELECT 即隐含 ALL 行为(与 SELECT DISTINCT 相对,DISTINCT 会去除重复记录,而 ALL 会保留所有记录,包括重复项)。

与比较运算符结合:在子查询中,ALL 用于指定条件需满足子查询返回的所有值。例如 WHERE 列名 > ALL(子查询) 表示该列的值要大于子查询结果中的所有值。

第四题
显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门
的员工)

ANY 的作用是判断 “表达式” 与子查询返回的任意一个值是否满足指定的比较条件。如果存在至少一个值满足条件,则整个表达式返回 TRUE;否则返回 FALSE。

第五题

查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人

这是因为 MySQL 中 “行构造器”(Row Constructor)的比较是严格按顺序、按列匹配的,字段顺序不同会导致匹配逻辑完全变化,具体分析如下:

第六题
显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资
第七题
查找每个部门工资最高的人的姓名、工资、部门、最高工资

5.合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 unionunion all
第一题

将工资大于2500或职位是MANAGER的人找出来

第二题
将工资大于25000或职位是MANAGER的人找出来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值