mysql查询进阶——员工表与部门表连接查询
如下是员工表与部门表的表内容。
查询月薪最高的员工姓名和月薪(子查询)
select ename, sal from tb_emp
where sal = (select max(sal) from tb_emp
);
-- 如果月薪最高的员工有多个,则结果不正确。
-- select ename, sal from tb_emp order by sal desc limit 1;
查询员工的姓名和年薪((月薪+补贴)*13)
有的员工没有补贴,且值为null,因此需要对null做处理,如果值为空,则设置为0。
若直接将空值拿来运算,任何运算方式得到的都将是空值,相当于布尔值的假。
select ename, (sal + ifnull(comm, 0)) * 13 as annsal
from tb_emp order by annsal desc;
查询所有部门的名称和人数
运维部门没有员工,查询所有部门需要外连接查询。
使用where或者內连接无法查到没有员工的部门。
select dname as 部门名称, ifnull(total, 0) as 总人数
from tb_dept t1 left outer join
(select dno, count(eno) as total from tb_emp group by dno) t2
on t1.dno = t2.dno;
查询月薪最高的员工(Boss除外)的姓名和月薪
判断值是否为null,不能用等于,要用is。
select ename, sal from tb_emp
where sal = (select max(sal) from tb_emp where mgr is not null
);
查询薪水超过平均薪水的员工的姓名和月薪
select ename, sal from tb_emp where sal > (select avg(sal) from tb_emp
);
查询月薪超过其所在部门平均月薪的员工的姓名、部门编号和月薪
select ename, t1.dno, sal from tb_emp t1 inner join
(select dno, avg(sal) as avgsal from tb_emp group by dno) t2
on t1.dno = t2.dno where sal > avgsal;
查询部门中薪水最高的人姓名、月薪和所在部门名称
-- 写法一
select ename, sal, dname from tb_dept t3 inner join
(select ename, sal, t1.dno from tb_emp t1 inner join
(select dno, max(sal) as maxsal from tb_emp group by dno) t2
on t1.dno = t2.dno where sal = maxsal) t4
on t3.dno = t4.dno;
-- 写法二
select ename, sal, dname from tb_emp t1,
(select dno, max(sal) as maxsal from tb_emp group by dno) t2,
tb_dept t3 where t1.dno = t3.dno and t1.dno = t2.dno
and sal = maxsal;
查询主管的姓名和职位
distinct 和 in 都是对mysql性能影响较大的语句,可以使用存在性判断(exists)取代去重(distinct)和集合运算(in),见方法二
select ename, job from tb_emp where eno in (select distinct mgr from tb_emp where mgr is not null
);
-- 方法二
select ename, job from tb_emp t1 where exists
(select 'x' from tb_emp t2 where t1.eno=t2.mgr);
查询月薪排名4~6名的员工排名、姓名和月薪
mysql没有专门的排名方法,需要手动创建变量使其自增,
若在order by sal desc后面直接执行limit 3,3; 那么排名将会变成1,2,3
select rn, ename, sal from
(select @a:=@a+1 as rn, ename, sal
from tb_emp t1, (select @a:=0) t2
order by sal desc) t3 where rn between 4 and 6;
mysql查询进阶——员工表与部门表连接查询相关推荐
- 【MySQL】34道SQL综合练习详解(员工表、部门表、工资等级表)
文章目录 一.34道SQL综合练习 二.测试使用的数据表 三.创建测试表的SQL语句 一.34道SQL综合练习 1.查询取得每个部门最高工资的人员信息. select e.ename,t.* from ...
- mysql员工表部门表_部门表 department 部门编号 dept_id 部门名称 汇总表
有两张表 部门表 department 部门编号 dept_id 部门名称 dept_mement create table department( dept_id tinyint auto_in ...
- oracle员工表和部门表基本操作
emp 员工表(empno 员工号/ename 员工姓名/job 工作/mgr 上级编号/hiredate 受雇日期/sal 薪金/comm 佣金/deptno 部门编号) dept 部门表(dept ...
- mysql 事b务 查询_MySQL进阶学习笔记二(包括连接查询、子查询、联合查询、事务、存储过程)...
1.高级查询 (1)了解笛卡尔积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序 ...
- mysql 开发进阶篇系列 23 应用层优化与查询缓存
一.概述 前面章节介绍了很多数据库的优化措施,但在实际生产环境中,由于数据库服务器本身的性能局限,就必须要对前台的应用来进行优化,使得前台访问数据库的压力能够减到最小. 1. 使用连接池 对于访问数据 ...
- mysql sql 连接查询语句_Mysql——sql数据库中的连接查询
1.1.1 交叉连接(CROSS JOIN) 交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的. ...
- mysql内连接查询原理_MySQL全面瓦解12:连接查询的原理和应用
概述 MySQL最强大的功能之一就是能在数据检索的执行中连接(join)表.大部分的单表数据查询并不能满足我们的需求,这时候我们就需要连接一个或者多个表,并通过一些条件过滤筛选出我们需要的数据. 了解 ...
- mysql交叉查询教程_史上最简单的 MySQL 教程(二十六)「连接查询(上)」
连接查询连接查询:将多张表(大于等于 2 张表)按照某个指定的条件进行数据的拼接,其最终结果记录数可能有变化,但字段数一定会增加. 连接查询的意义:在用户查询数据的时候,需要显示的数据来自多张表. 连 ...
- MySQL登录后显示mariadb_mysql/mariadb学习记录——连接查询(JOIN)
//本文使用的数据表格 //persons表中id_p为主键 //orders表中id_o为主键,id_p为外键参考persons表中的id_p mysql> select * from per ...
最新文章
- debugger 调试的一些经验
- 【杭电ACM】1097 A hard puzzle
- python找不到reshape_如何加速Python程序
- ARP/代理ARP的总结
- HTML5学习笔记(一):HTML简介
- golang错误处理(实验楼)
- MyBatis的几个重要概念和工作流程
- 现在早上起来都还是感觉颈椎有些通
- linux操作系统字段含义,Linux系统 /etc/fstab各个字段含义解释
- mysql seconds_behind_master_MySQL中的seconds_behind_master的理解
- 操作系统学习总结(超赞!!!)
- c++语言表白超炫图形_R语言统计与绘图:组合图形布局
- 没有run窗口_使用 Terminator 在一个窗口中运行多个终端 | Linux 中国
- 搭建golang+vscode开发环境
- 拓端tecdat|matlab从ECG信号数据趋势项的消除
- 阿里蚂蚁金服中间件6轮面试!实拍题目和6点血泪总结!
- 云桌面优缺点_云桌面中VDI架构有什么优势和劣势?
- 数据结构试题期中期末考试【含答案】
- 最新WIN10系统封装教程2019系列(一)——定制母盘
- 金立android手机怎么截图,金立M6手机怎么截图 金立M6截屏/截图方法(两种)
热门文章
- 专业水平自述 计算机,研究生个人陈述范例,计算机专业.
- 注册表去除桌面快捷方式小箭头引起此电脑右键管理无法使用
- thinkpad x200 自己更换风扇的步骤和更换后的调整
- ucenter base.php,UCenter之应用通信分析(一)
- 儿童抽动症有哪些表现?
- 苹果CEO史蒂夫·乔布斯在斯坦福演讲(一)
- 数字病理切片处理---------组织学处理学习
- DesktopGoose的下载和使用(抖音网红桌宠鹅)【保姆级教程】
- 【算法讲5:乘性函数(中)】莫比乌斯函数 | 莫比乌斯反演 | 莫比乌斯反演应用
- 红米note1s android5,绕晕了:红米Note、红米1S各版本差异详解