mysql练习---多表连接查询


-- 创建部门表
create table if not exists dept3(
deptno varchar(20) primary key , -- 部门号
name varchar(20) -- 部门名字
);
-- 创建员工表
create table if not exists emp3(
eid varchar(20) primary key , -- 员工编号
ename varchar(20), -- 员工名字
age int, -- 员工年龄
dept_id varchar(20) -- 员工所属部门
);
-- 给dept3表添加数据
insert into dept3 values('1001','研发部');
insert into dept3 values('1002','销售部');
insert into dept3 values('1003','财务部');
insert into dept3 values('1004','人事部');
-- 给emp3表添加数据
insert into emp3 values('1','乔峰',20, '1001');
insert into emp3 values('2','段誉',21, '1001');
insert into emp3 values('3','虚竹',23, '1001');
insert into emp3 values('4','阿紫',18, '1001');
insert into emp3 values('5','扫地僧',85, '1002');
insert into emp3 values('6','李秋水',33, '1002');
insert into emp3 values('7','鸠摩智',50, '1002');
insert into emp3 values('8','天山童姥',60, '1003');
insert into emp3 values('9','慕容博',58, '1003');
insert into emp3 values('10','丁春秋',71, '1005');

1、查询每个部门的所属员工
2、查询研发部门的所属员工
3、查询研发部和销售部的所属员工
4、查询每个部门的员工数,并升序排序
5、查询人数大于等于3的部门,并按照人数降序排序


1、

select t2.name,group_concat(t1.ename separator ';') 
from emp3 t1 
left join dept3 t2 on t1.dept_id=t2.deptno
group by 
t1.dept_id;

group_concat() 可以合并多行记录,括号里面放的是需要合并的字段。默认是逗号隔开。


2、

select t2.name,group_concat(t1.ename separator ';') 
from emp3 t1 
left join dept3 t2 on t1.dept_id=t2.deptno
group by 
t1.dept_id
having t2.name='研发部';

 


3、

select t2.name,group_concat(t1.ename separator ';') 
from emp3 t1 
left join dept3 t2 on t1.dept_id=t2.deptno
group by 
t1.dept_id
having t2.name='研发部' or t2.name='销售部';

 


4、部门人数为0的情况。

select d.name,(
select count(*) from emp3 e where e.dept_id=d.deptno
) 个数
from dept3 d 
order by 个数;

 


5、 

select name,count(*) as 总人数 from emp3,dept3 where dept_id=deptno group by dept_id  having 总人数>=3 order by 总人数 desc;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值