MySQL多表查询练习

🔥🔥宏夏Coding网站,致力于为编程学习者、互联网求职者提供最需要的内容!网站内容包括求职秘籍,葵花宝典(学习笔记),资源推荐等内容。在线阅读:https://hongxiac.com🔥🔥

表的创建:

所需要的三张表结构:

emp(员工)表数据:

create table emp(
    id int auto_increment comment 'ID' primary key ,
    name varchar(50) not null comment '姓名',
    age int comment '年龄',
    job varchar(50) comment '职位',
    salary int comment '薪资',
    entrydate date comment '入职时间',
    managerid int comment '直属领导ID',
    dept_id int comment '部门ID'
)comment '员工表';
insert into emp(id,name,age,job,salary,entrydate,managerid,dept_id) values
    (1,'金庸',66,'总裁',20000,'2000-1-1',null,5),(2,'张无忌',20,'项目经理',12500,'2005-12-05',1,1),
    (3,'杨逍',33,'开发',8400,'2000-11-03',2,1),(4,'韦一笑',48,'开发',11000,'2002-02-05',2,1),
    (5,'常遇春',43,'开发',10500,'2004-09-07',3,1),(6,'小昭',19,'程序员鼓励师',6600,'2004-10-12',2,1),
    (7,'灭绝',60,'财务总监',8500,'2002-09-12',1,3),(8,'周芷若',19,'会计',4800,'2006-06-02',7,3),
    (9,'丁敏君',23,'出纳',5250,'2009-05-13',7,3),(10,'赵敏',20,'市场部总监',12500,'2004-10-12',1,2),
    (11,'鹿杖客',56,'职员',3750,'2006-10-03',10,2),(12,'鹤笔翁',19,'职员',3760,'2007-05-09',10,2),
    (13,'东方白',19,'职员',5500,'2009-02-12',10,2),(14,'张三丰',88,'销售总监',14000,'2004-10-12',1,4),
    (15,'余莲舟',38,'销售',4600,'2004-10-12',14,4),(16,'宋远桥',40,'销售',4600,'2004-10-12',14,4),
    (17,'陈友谅',42,null,2000,'2011-10-12',1,null);

 dept(部门)表数据:

create table dept(
    id int auto_increment comment 'ID' primary key ,
    name varchar(50) not null comment '部门名称'
)comment '部门表';
insert into dept (id,name) values (1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'z总经办');
alter table emp add constraint fk_deptid foreign key (dept_id) references dept (id);

 salgrade(薪资等级)数据:

create table salgrade(
    grade int,
    losal int,
    hisal int
) comment '薪资等级表';
insert into salgrade values (1,0,3000);
insert into salgrade values (2,3001,5000);
insert into salgrade values (3,5001,8000);
insert into salgrade values (4,8001,10000);
insert into salgrade values (5,10001,15000);
insert into salgrade values (6,15001,20000);
insert into salgrade values (7,20001,25000);
insert into salgrade values (8,25001,30000);

练习:

1.查询员工的姓名,年龄,职位,部门信息 (隐式内连接)

select e.name, e.age, e.job, d.name from emp e, dept d where e.dept_id = d.id;

2.查询年龄小于30岁的员工姓名,年龄,职位,部门信息(显式内连接,隐式内连接)

select e.name, e.age, e.job, d.name from emp e inner join dept d on e.dept_id = d.id where e.age < 30;

3.查询拥有员工的部门名称,部门ID

select distinct d.name, d.id from emp e, dept d where e.dept_id = d.id;

4.查询所有年龄大于40岁的员工,及其归属的部门名称;若员工没有部门,也要显示出来

select e.*, d.name from emp e left outer join dept d on e.dept_id = d.id where e.age > 40;

5.查询所有员工的薪资等级

select e.*,s.grade from emp e, salgrade s where e.salray between s.losal and s.hisal;

6.查询‘研发部’所有员工的信息及工资等级

select e.*, s.grade from emp e, salgrade s where e.salary between s.losal and s.hisal and e.dept_id = (select id from dept where name = '研发部');

7.查询‘研发部’员工的平均工资

select avg(salary) from emp e where e.id = (select id from dept where name = '研发部');

8.查询工资比‘灭绝’高的员工信息

select * from emp e where e.salary > (select salary from emp where name = '灭绝');

9.查询比平均薪资高的员工信息

select * from emp e where e.salary > (select avg(salary) from emp);

*10.查询低于本部门平均工资的员工信息(前面的e1传递给后面进行部门是否相同的比较)

select * from epm e1 where e1.salary < (select avg(salary) from emp e2 where e2.dept_id = e1.dept_id);

*11.查询所有的部门信息,并统计部门的员工人数

select count(*) from emp where dept_id = 
select d.id, d.name, (select count(*) from emp where dept_id = d.id) '人数' from dept ;

总结:

  • 查询拥有员工的部门(级交集)使用内连接查询,注意用distinct去除重复

  • 若没有员工的部门也要显示出来(即两表并集),使用左外连接

  • 外部字段的可以传递给子查询作为条件进行判断

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL多表查询是指在查询中同时涉及到多个表的操作。多表查询可以更加方便地获取到需要的数据,提供了更加灵活的查询方式。 在进行多表查询之前,我们首先需要对多个表之间的关系进行了解和分析。常见的多表查询方式包括联接查询、子查询以及多级嵌套查询等。 联接查询是最常见且常用的多表查询方式之一。通过联接查询,我们可以根据两个或多个表之间的关联字段,将它们连接在一起进行查询。 例如,我们有两个表A和B,它们通过一个共同的字段关联起来。我们可以使用联接查询语句如下: SELECT A.field1, B.field2 FROM A INNER JOIN B ON A.common_field = B.common_field; 在这个查询中,我们使用了INNER JOIN关键字将表A和表B连接起来,其中common_field是两个表之间的关联字段。通过这个联接查询,我们可以同时获取到表A和表B中的相关信息。 除了联接查询之外,我们还可以使用子查询和多级嵌套查询进行多表查询。 子查询是指在查询语句中嵌套了另一个查询语句。通过子查询,我们可以在一个查询中引用另一个查询的结果作为条件进行查询。 多级嵌套查询是指在一个查询语句中嵌套了多个子查询。通过多级嵌套查询,我们可以按照一定的顺序和逻辑进行复杂的查询操作。 综上所述,MySQL多表查询是一种可以同时涉及多个表进行查询的操作。通过联接查询、子查询和多级嵌套查询等方式,我们可以更加灵活地获取到需要的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值