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

sql业务场景分析思路参考

1、时间可以进行排序,也可以用聚合函数对时间求最大值max(时间)

例如下面的例子:取最晚入职的人,那就是将入职时间倒序排序,然后limit 1

表:

 场景:查找最晚入职员工的所有信息

select * from employees order by hire_date desc limit 1

方法二:子查询 

select * from employees where hire_date=(select max(hire_date) from employees)

2、 limit可以单独两个参数使用,也可以和offset一起使用

例如:

表:

业务需求: 

代码:limit两个参数单独使用:倒序排序,从第三行开始显示,显示一行数据

select * from employees order by hire_date desc limit 2,1

或者:结合offset使用:

select * from employees order by hire_date desc limit 1 offset 2

3、内连接、左连接、右连接的连接后表的合并情况:

(1)两表内连接的结果是将后面的表拼接在前面的表后面

看例子:两个表:

内连接代码:

select *
from salaries sa join dept_manager  de on sa.emp_no=de.emp_no

结果: 

 (2)右连接

两个表:

 上面的表右连接下面的表,代码如下:

select *
from employees e right join dept_emp d on e.emp_no=d.emp_no

结果:

虽然是右连接,但是上面的表在right join的前面,前面的表右连接后面的表,那前面的表就在最后的结果中在前面展示,后面的表在后面展示,但是右连接是保留后面的表的所有行

4、新型思路:找第二大的数据,先把第一大的数据筛选掉,然后再在表格中找第一大也就是原本表格的第二大的数据了

表:

需求: 

代码:

select e.emp_no,s.salary,e.last_name,e.first_name
from employees e join salaries s on e.emp_no=s.emp_no
where s.salary=(select max(s2.salary)from salaries s2where s2.salary<(select max(salary) from salaries) 
)

 题解:

结果:

4、两个表连接,输出在职员工自入职以来的薪水涨幅情况

业务需求:

表:

思路:

用两次join,连接三个表,先连接前两个表,后连接第三个表,然后用当前工资减去入职工资。

结果:

5、MySql在处理group by和非聚合列的关系上有变动:一定的版本或者关系允许,使用group by时有select后面有非聚合列的出现:

官方解释:

官网链接:MySQL :: MySQL 5.7 Reference Manual :: 12.19.3 MySQL Handling of GROUP BY 

例子:

表:

业务需求:

代码:

select de.dept_no,dep.dept_name,count(de.dept_no)
from dept_emp de 
right join departments dep on de.dept_no=dep.dept_no
join salaries s on de.emp_no=s.emp_no
group by de.dept_no
order by de.dept_no

结果:

 

解释:

 

 

 

相关文章:

  • 免费的二级域名分发,您确定不要试试吗?
  • 嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
  • 量化交易对长期投资的影响
  • 【matlab】回归预测——智能优化算法支持向量机
  • Java中继承接口和实现接口的区别、接口和抽象类的区别、并理解关键字interface、implements
  • centos7.9 python3环境(virtualenv)搭建及所遇错误
  • 2024年洗地机哪个牌子好?内行人最建议这4个:清洁力口碑公认都不错
  • 【MySQL】事务实现原理
  • Pip换源,以及python解耦方法实现
  • Linux/Ubuntu访问局域网共享文件夹
  • 面向物联网行业的异常监控追踪技术解决方案:技术革新与运维保障
  • 【C语言】C语言 4 个编译过程详解
  • 一站式采购!麒麟信安CentOS安全加固套件上架华为云云商店
  • 简易电阻、电容和电感测量仪-FPGA
  • [leetcode]max-consecutive-ones 最大连续1的个数
  • Computed property XXX was assigned to but it has no setter
  • ECS应用管理最佳实践
  • Fundebug计费标准解释:事件数是如何定义的?
  • JavaScript异步流程控制的前世今生
  • java中具有继承关系的类及其对象初始化顺序
  • MySQL主从复制读写分离及奇怪的问题
  • Nodejs和JavaWeb协助开发
  • Python 基础起步 (十) 什么叫函数?
  • Vue ES6 Jade Scss Webpack Gulp
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 那些年我们用过的显示性能指标
  • 使用API自动生成工具优化前端工作流
  • 算法系列——算法入门之递归分而治之思想的实现
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 中文输入法与React文本输入框的问题与解决方案
  • No resource identifier found for attribute,RxJava之zip操作符
  • 2017年360最后一道编程题
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​香农与信息论三大定律
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #13 yum、编译安装与sed命令的使用
  • #Z2294. 打印树的直径
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (0)Nginx 功能特性
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (动态规划)5. 最长回文子串 java解决
  • (翻译)terry crowley: 写给程序员
  • (正则)提取页面里的img标签
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET 8.0 发布到 IIS
  • .Net 8.0 新的变化
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 中让 Task 支持带超时的异步等待
  • .NET6实现破解Modbus poll点表配置文件
  • .NET业务框架的构建
  • .Net组件程序设计之线程、并发管理(一)
  • /dev下添加设备节点的方法步骤(通过device_create)