当前位置: 首页 > article >正文

MySQL多表查询案例

先看我的表数据

dept表

emp表

salgrade表

student表

course表

student_course表

1. 查询员工的姓名, 年龄, 职位, 部门信息(隐式内连接)
-- 表:emp, dept
-- 连接条件 emp.dept_id = dept.id 

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

2. 查询年龄小于30岁的员工姓名,年龄,职位,部门信息(显式内连接)
-- 表:emp, dept
-- 连接条件 emp.dept_id = dept.id 
 

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.id, d.name from emp e, dept d where e.dept_id = d.id;

 4.查询所有年龄大于40岁的员工,及归属的部门名称;如果员工没有分配部门, 也需要展示出来

-- emp, dept
-- 连接条件:emp.dept_id = dept.id 
-- 外连接

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

5.查询所有员工的工资等级(联合查询)
-- 表emp, salgrade
-- 连接条件:emp.salary >= salgrade.local and emp.salary <= salgrade.hisal 

select e.*, s.grade, s.losal, s.hisal from emp e , salgrade s where e.salary >= s.losal and e.salary <= s.hisal;
select e.*, s.grade, s.losal, s.hisal from emp e , salgrade s where e.salary between s.losal and s.hisal;

 6.查询“研发部” 所有员工的信息及 工资等级
-- 表:emp, dept, salgrade
-- 连接条件 1.emp和salgrade 条件emp.salary between salgrade.local and salgrade.hisal  2. emp.dept_id = dept.id
-- 查询条件:研发部 dept.name = '研发部';

SELECT
	e.*,
	s.grade 
FROM
	emp e,
	dept d,
	salgrade s 
WHERE
	( e.dept_id = d.id ) 
	AND ( e.salary BETWEEN s.losal AND s.hisal ) 
	AND ( d.NAME = '研发部' );

7.查询 “研发部的平均工资”
-- 表emp, dept
-- 连接条件 emp.dept_id = dpet.id 

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

8.查询工资比“灭绝”高的员工信息

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

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

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

0 查询低于本部门平均工资的员工信息
-- a. 查询指定部门平均薪资
select avg(e1.salary) from emp e1 where e1.dept_id = 1; 
select avg(e1.salary) from emp e1 where e1.dept_id = 2; 

-- b. 查询低于本部门平均工资的员工信息

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

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

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

12. 查询所有学生的选课情情况,展示出学生名称,学号,课程名称 
-- 表:student, course, student_course
-- 连接条件stduent.id = student_course.studentid, course.id = student_course.courseid
 

select s.name, s.no, c.name from student s, student_course sc, course c where s.id = sc.studentid and c.id = sc.courseid; 

 MySQL多表查询的总结


http://www.kler.cn/news/337675.html

相关文章:

  • Java | Leetcode Java题解之第455题分发饼干
  • 《RabbitMQ篇》消费者轮询消费消息
  • 为什么选择PageAdmin网站模版搭建网站?
  • 10月7日刷题记录
  • 【Llamaindex RAG实践】
  • 编译内核lspcu 工具源码 util-linux
  • 使用Three.js库创建的简单WebGL应用程序,主要用于展示具有不同透明度和缩放比例的圆环列
  • 香橙派如何连接网络,及wiringOP库
  • 如何利用免费工具轻松设计出专业Logo?
  • Python数据分析工具:Statsmodels的用法示例
  • (九)Shell 脚本(四):正则表达式、sed 和 awk 详解
  • 极显然:百年极限论是模糊不清的理论
  • 使用Spring Security实现用户-权限-资源的精细化控制
  • 个人如何申请书号?
  • 第38讲:Ceph分布式存储集群部署
  • Linux 文件管理
  • 大数据新视界 --大数据大厂之 Kafka 性能优化的进阶之道:应对海量数据的高效传输
  • HTTPS介绍 --- 超详细保姆级知识讲解
  • 每日新闻掌握【2024年9月21日 星期六】
  • MyBatis 操作数据库入门