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

Day43(13)-基本上都是在敲SQL-db04

多表查询

笛卡尔积

image-20251119162608028

-- 查询
select * from emp ,dept where emp.dept_id = dept.id;
-- 查询
select * from emp ,dept where emp.dept_id = dept.id;-- ============================= 内连接 ==========================
-- A. 查询所有员工的ID, 姓名 , 及所属的部门名称 (隐式、显式内连接实现)
-- 隐式
select emp.id, emp.name,dept.name from emp ,dept where emp.dept_id = dept.id;-- 显式 inner 可以省略
select emp.id, emp.name,dept.name from emp inner join dept on emp.dept_id = dept.id ;-- B. 查询 性别为男, 且工资 高于8000 的员工的ID, 姓名, 及所属的部门名称 (隐式、显式内连接实现)
-- 隐式
select emp.id, emp.name,dept.name from emp ,dept where emp.dept_id = dept.id and emp.gender = 1 and emp.salary>8000;-- 显式
select emp.id, emp.name,dept.name from emp join dept on emp.dept_id = dept.id where emp.gender = 1 and emp.salary>8000;-- 为表起别名 as 可以省略
select e.id, e.name,dept.name from emp as e join dept on e.dept_id = dept.id where e.gender = 1 and e.salary>8000;

image-20251119170708058

-- =============================== 外连接 ============================
-- A. 查询员工表 所有 员工的姓名, 和对应的部门名称 (左外连接)out 可以省略
select e.name,d.name from emp e left outer join dept d on d.id = e.dept_id;-- B. 查询部门表 所有 部门的名称, 和对应的员工名称 (右外连接)out 可以省略
select e.name,d.name from emp e right outer join dept d on d.id = e.dept_id;-- C. 查询工资 高于8000 的 所有员工的姓名, 和对应的部门名称 (左外连接)
select e.name,d.name from emp e left join dept d on d.id = e.dept_id where salary >8000;select e.name,d.name from dept d right join emp e on d.id = e.dept_id where salary >8000;

image-20251119170941283

-- ========================= 子查询 ================================
-- 标量子查询
-- A. 查询 最早入职 的员工信息
-- a.先去获取最早入职时间
select min(entry_date) from emp;-- b.查询 最早入职 的员工信息
select * from emp where entry_date = '2000-01-01';select * from emp where entry_date = (select min(entry_date) from emp);-- B. 查询在 "阮小五" 入职之后入职的员工信息
-- a.先去获取阮小五入职时间
select entry_date from emp where name = '阮小五';-- b.查询 阮小五入职之后 的员工信息
select * from emp where entry_date > '2015-01-01';select * from emp where entry_date > (select entry_date from emp where name = '阮小五');-- 列子查询
-- A. 查询 "教研部" 和 "咨询部" 的所有员工信息
-- a.先需要去查询"教研部" 和 "咨询部" 的部门ID
select id from dept where name = '教研部' or name = '咨询部';-- b.查询指定部门ID的员工信息
select * from emp where dept_id in (2,3);select * from emp where dept_id in (select id from dept where name = '教研部' or name = '咨询部');-- 行子查询
-- A. 查询与 "李忠" 的薪资 及 职位都相同的员工信息 ;
-- a.查询与 "李忠" 的薪资 及 职位
select salary,job from emp where name = '李忠';-- b.查询指定薪资和职位的员工信息
select * from emp where salary = 5000 and job = 5;select * from emp where salary = (select salary from emp where name = '李忠') and job = (select job from emp where name = '李忠');-- 优化:
select * from emp where (salary,job) = (5000,5);select * from emp where (salary,job) = (select salary,job from emp where name = '李忠');-- 表子查询
-- A. 获取每个部门中薪资最高的员工信息
-- a.获取每个部门中的最高薪资
select dept_id,max(salary) from emp group by dept_id;-- b.查询每个部门中薪资最高的员工信息
select * from emp e,(select dept_id,max(salary) max_sal from emp group by dept_id) awhere e.dept_id = a.dept_id and e.salary = a.max_sal;
-- 需求:
-- 1. 查询 "教研部" 性别为 男,且在 "2011-05-01" 之后入职的员工信息 。
-- 表:dept ,emp
select * from emp where dept_id = (select id from dept where dept.name = '教研部') and gender = 1 and entry_date > '2011-05-01';select * from emp e,dept d where e.dept_id=d.id and d.name = '教研部' and e.gender = 1 and entry_date >  '2011-05-01';-- 2. 查询工资 低于公司平均工资的 且 性别为男 的员工信息 。
-- 表:emp
-- 2.1 查询 公司的平均工资
select avg(salary) from emp;-- 2.2 查询工资 低于公司平均工资的 且 性别为男 的员工信息 。
select * from emp where salary < (select avg(salary) from emp) and gender = 1;-- 3. 查询部门人数超过 10 人的部门名称 。
-- 表:emp dept
select d.name,count(*) from emp e,dept d where e.dept_id=d.id group by d.name having count(*)>10;select name from dept where id = (select dept_id from (select count(*) c,dept_id from emp group by dept_id) a where a.c >10);-- 4. 查询在 "2010-05-01" 后入职,且薪资高于 10000 的 "教研部" 员工信息,并根据薪资倒序排序。
-- 表:emp dept
select e.* from emp e,dept d where e.dept_id=d.id and entry_date>'2010.05.01' and salary > 10000 and d.name= '教研部' order by salary desc ;select * from emp where entry_date>'2010-05-01' and salary>10000 and  dept_id=(select id from dept where dept.name = '教研部') order by  salary desc ;-- 5. 查询工资 低于本部门平均工资的员工信息 。
-- 表:emp dept
-- 5.1 查询每个部门的平均薪资
select dept_id,avg(salary) avg_sal from emp group by dept_id;-- 5.2 查询工资 低于本部门平均工资的员工信息 。
select * from emp e,(select dept_id,avg(salary) avg_sal from emp group by dept_id) a where e.dept_id = a.dept_id and e.salary<a.avg_sal;select * from (select emp.*,avg from emp ,(select avg(salary) avg,dept_id from emp group by dept_id) a where a.dept_id=emp.dept_id) ans where salary<avg;
http://www.jsqmd.com/news/44935/

相关文章:

  • 空间变换层和自注意力机制
  • linux ftp 客户端安装
  • MacX Video Converter Pro for Mac v6.8.2 安装视频转换器安装步骤(附安装包)
  • 数字分身---沃伦巴菲特
  • SPYSE团队独家专访:构建互联网基础设施搜索引擎的技术实践
  • 数学的大厦(四):减法与整数
  • 深入解析:Kotlin 高阶函数在回调设计中的最佳实践
  • 医药生产线HMI与PLC互联:总线协议Modbus RTU 转Modbus TCP 适配方案
  • 信息化、数字化、智能化、智慧化、数智化,到底啥区别 - 智慧园区
  • 洛谷 B4413:[GESP202509 三级] 数组清零
  • MOSHELL (7) : 构建3G RNC端到端性能可观测性体系 - 指南
  • 中大型超市智能运营导购系统:AI 精准推送,滞销品库存加速 19%!
  • 雨水从黑云降临到了人间 果实脱落枝叶吸收于地面 时间流逝再也回不到从前 曾经珍藏回忆变成不可逆爱恋
  • 高州市胃癌手术专家选择指南:茂名陈医生专业医学背景+丰富临床经验+精湛手术技术!
  • c#构建日报
  • linux ftp 修改密码
  • linux ftp shell
  • 我讨厌 DP 和 COUNT 的100个理由(下)
  • 详细介绍:数组初阶(2)
  • Gemini 3 Pro入门教程:从零开始学会使用最新gemini-3-pro-preview API接入
  • 20232314 2025-2026-1 《网络与系统攻防技术》实验七实验报告
  • 高州市陈郁强副主任擅长做肠癌手术:口碑优秀+医术高超!
  • 102302156 李子贤 数据采集第三次作业
  • SHELL脚本的基础入门
  • roocode_kilocode对比
  • 工程成本管理软件新纪元:选软件看这三点!
  • 全国计算机等级考试——二级JAVA完整大题题库【五十三道】
  • 【C + +】unordered_set 和 unordered_map 的用法、区别、性能全解析 - 实践
  • Spring AI 代码分析(一)--工程结构
  • Spring Boot迅速集成MiniMax、CosyVoice实现文本转语音