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

MySQL——复合查询表的内外连

目录

复合查询

回顾基本查询

多表查询

自连接

子查询 

where 字句中使用子查询

单行子查询

多行子查询

多列子查询

from 字句中使用子查询

合并查询

实战OJ

查找所有员工入职时候的薪水情况

获取所有非manager的员工emp_no

获取所有员工当前的manager

表的内外连

内连接

外连接

左连接

右外连接

实战OJ

分数排名

换座位


复合查询

回顾基本查询

        查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J

        按照部门号升序而雇员的工资降序排序

        使用年薪进行降序排序

        显示工资最高的员工的名字和工作岗位

        显示工资高于平均工资的员工信息

        显示每个部门的平均工资和最高工资

        显示(按照每个部门)平均工资低于2000的部门号和它的平均工资

        显示每种岗位的雇员总数,平均工资

多表查询

        实际开发中往往数据来自不同的表,所以需要多表查询

        使用 select * from 连接两张表时用逗号隔开,结果是两张表的所有记录组合,称为笛卡尔积

        显示雇员名、雇员工资以及所在部门的名字

        显示部门号为10的部门名,员工名和工资

        显示各个员工的姓名,工资,及工资级别

自连接

        自连接是指在同一张表连接查询

        显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号 empno是公司员工编号)

子查询 

        子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

where 字句中使用子查询

单行子查询

        返回一行记录的子查询

        显示SMITH同一部门的员工

多行子查询

        返回多行记录的子查询

        查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的(使用 in 关键字)

        显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号(可以使用 all 关键字)

        显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(比部门30的最小工资大即可)(使用 any 关键字)

多列子查询

        单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句

        查询和SMITH的部门和岗位完全相同的所有雇员的名字,岗位和部门,不含SMITH本人

from 字句中使用子查询

        显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资

        查找每个部门工资最高的人的姓名、工资、部门、最高工资(太长省略as关键字)

        显示每个部门的信息(部门名,编号,地址)和人员数量

合并查询

        在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all找并集

        将工资大于2500或职位是MANAGER的人找出来(使用 union 把不出现重复行)

        使用union all 可出现结果重复(出现交集的地方允许重复)

实战OJ

查找所有员工入职时候的薪水情况

select s.emp_no,s.salary from employees e,salaries s 
where e.emp_no=s.emp_no and e.hire_date=s.from_date 
order by emp_no desc;

获取所有非manager的员工emp_no

select emp_no from employees where emp_no not in (select emp_no from dept_manager);

获取所有员工当前的manager

select e.emp_no,m.emp_no from dept_emp e,dept_manager m
where e.dept_no=m.dept_no and e.emp_no!=m.emp_no;

表的内外连

内连接

        内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面的多表查询都是内连接,也是在开发过程中使用的最多的连接查询

        显示SMITH的名字和部门名称

外连接

        外连接分为左连接与右连接

左连接

        多表查询,左侧的表显示所有信息我们就说是左外连接

        建两张表:学生表与成绩表并在里面插入对应的数据

        查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来

右外连接

        多表查询,右侧的表显示所有信息我们就说是右外连接

        对stu表和stu_exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它应,也要显示出来

        列出部门名称和这些部门的员工名,同时列出没有员工的部门

实战OJ

分数排名

相同的表查询:

第一张a表中我们对分数进行降序排序;

第二张b表中我们去除重复的分数后得到集合X:在X中找到比a表的分数大于等于的数的元素个数,此时该元素个数就是a表的分数在表中的排名,比如:最高为98,在集合X中找到的分数有98,99,100:此时元素个数为3也就是98分的排名

select a.score score,
(select count(distinct b.score) from Scores b where b.score>=a.score) 'rank'
from Scores a order by a.score desc;

换座位

遇到id遇到偶数-2 / 偶数-1,奇数+1

select rank() over(order by if(id%2=0,id-2,id)) as id,student from Seat;
-- select id,student from Seat order by if(id%2=0,id-2,id);

以上便是全部内容,有问题欢迎在评论区指正,感谢观看!

http://www.lryc.cn/news/2387199.html

相关文章:

  • 小米玄戒O1架构深度解析(一):十核异构设计与缓存层次详解
  • Numba模块的用法(高性能计算)
  • Kafka自定义分区策略实战避坑指南
  • PyTorch中cdist和sum函数使用示例详解
  • [免费]微信小程序宠物医院管理系统(uni-app+SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • centos7.9使用docker-compose安装kafka
  • ETL 工具与数据中台的关系与区别
  • SQLMesh Typed Macros:让SQL宏更强大、更安全、更易维护
  • DeepSpeed-Ulysses:支持极长序列 Transformer 模型训练的系统优化方法
  • Docker 使用镜像[SpringBoot之Docker实战系列] - 第537篇
  • 解锁MCP:AI大模型的万能工具箱
  • Error in beforeDestroy hook: “Error: [ElementForm]unpected width “
  • vscode包含工程文件路径
  • 私有知识库 Coco AI 实战(七):摄入本地 PDF 文件
  • GitLab 18.0 正式发布,15.0 将不再受技术支持,须升级【二】
  • NtfsLookupAttributeByName函数分析之和Scb->AttributeName的关系
  • STM32H7系列USART驱动区别解析 stm32h7xx_hal_usart.c与stm32h7xx_ll_usart.c的区别?
  • 网络原理 | TCP与UDP协议的区别以及回显服务器的实现
  • IP动态伪装开关
  • 【Unity3D】将自动生成的脚本包含到C#工程文件中
  • 解决leetcode第3509题.最大化交错和为K的子序列乘积
  • 【Python 深度学习】1D~3D iou计算
  • java23
  • 嵌入式工程师常用软件
  • LitCTF2025 WEB
  • Redisson WatchDog会一直续期吗?
  • Linux 下VS Code 的使用
  • Android开发namespace奇葩bug
  • watchEffect
  • Qt 布局管理器的层级关系