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

数据库操作

数据库操作

  • 1、 表之间连接
    MYSQL 题
    • 1、取第二高薪
    • 2、取第N高薪
    • 3、分数排名

inner join:2表值都存在

outer join:附表中值可能存在null的情况。

总结:

①A inner join B:取交集

②A left join B:取A全部,B没有对应的值,则为null

③A right join B:取B全部,A没有对应的值,则为null

④A full outer join B:取并集,彼此没有对应的值为null

1、取第二高薪

编写一个SQL查询以获得Employee表中第二高的薪水。

  • ---- + -------- +
    | Id | 薪水|

  • ---- + -------- +
    | 1 | 100 |
    | 2 | 200 |
    | 3 | 300 |

  • ---- + -------- +
    例如,给定上面的Employee表,查询应该返回200为第二高薪水。如果没有第二高的薪水,那么查询应该返回null。

  • --------------------- +
    | SecondHighestSalary |

  • --------------------- +
    | 200 |

  • --------------------- +
    或者

  • --------------------- +
    | SecondHighestSalary |

  • --------------------- +
    null

  • --------------------- +

关键字解释:
1、子查询,第一个select 如果查询没有值 为null。没有第一个select不能保证没有第二高薪的为null。
2、distinct 去重,如果一共两条数据,salary都是100,则第二个并不是第二高薪,因为查询结果并不能并列,所以将薪水为100,进行去重(薪水为100 保存一个,这样就起到一个并列的效果),这样第二高薪就为null,结果合理。

3、
① selete * from testtable limit 2,1;

② selete * from testtable limit 2 offset 1;

注意:

1.数据库数据计算是从0开始的

2.offset X是跳过X个数据,limit Y是选取Y个数据

3.limit X,Y 中X表示跳过X个数据,读取Y个数据

这两个都是能完成需要,但是他们之间是有区别的:

①是从数据库中第三条开始查询,取一条数据,即第三条数据读取,一二条跳过

②是从数据库中的第二条数据开始查询两条数据,即第二条和第三条。

select(select distinct salary 
from Employee as em
order by em.salary asc
limit 1 offset 1) as SecondHighestSalary

2、第N高薪水

表: Employee

±------------±-----+
| Column Name | Type |
±------------±-----+
| id | int |
| salary | int |
±------------±-----+
在 SQL 中,id 是该表的主键。
该表的每一行都包含有关员工工资的信息。

查询 Employee 表中第 n 高的工资。如果没有第 n 个最高工资,查询结果应该为 null 。
示例 1:

输入:
Employee table:
±—±-------+
| id | salary |
±—±-------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
±—±-------+
n = 2
输出:
±-----------------------+
| getNthHighestSalary(2) |
±-----------------------+
| 200 |
±-----------------------+
示例 2:

输入:
Employee 表:
±—±-------+
| id | salary |
±—±-------+
| 1 | 100 |
±—±-------+
n = 2
输出:
±-----------------------+
| getNthHighestSalary(2) |
±-----------------------+
| null |
±-----------------------+

关键字声明

1、limit 和offset 上一个题中讲过。
2、

//声明参数,将形参赋值给你定义的属性,因为数据库下标是从0开始的。所以-1操作。
DECLARE A INT;SET A=N-1;

3、整体代码

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE A INT;SET A=N-1;RETURN (# Write your MySQL query statement below.select (select distinct salaryfrom Employeeorder by salary desclimit 1 offset A )                   );
END

178. 分数排名
Scores

±------------±--------+
| Column Name | Type |
±------------±--------+
| id | int |
| score | decimal |
±------------±--------+

实例:
输入:
Scores 表:
±—±------+
| id | score |
±—±------+
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
±—±------+
输出:
±------±-----+
| score | rank |
±------±-----+
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 2 |
| 3.65 | 3 |
| 3.65 | 3 |
| 3.50 | 4 |
±------±-----+
关键字:
mysql中排名函数有三个:
1、row_number():表示排序,成绩相同,也不重复
2、rank():表示排序,成绩相同,排名重复,但跳跃
3、dense_rank():表示排序,排名重复,但不跳跃

解释:
1、表示排序,成绩相同,也不重复(排名1,2)不会出现并列。
在这里插入图片描述

2、rank():表示排序,成绩相同,排名重复,但跳跃

在这里插入图片描述

3、dense_rank():表示排序,排名重复,但不跳跃

在这里插入图片描述

select score ,DENSE_RANK() OVER(ORDER BY score DESC) as 'rank'
from Scores
order by score DESC
http://www.lryc.cn/news/289980.html

相关文章:

  • MySQL-删除重复数据
  • Android Handler完全解读
  • 群晖NAS搭建WebDav结合内网穿透实现公网访问本地影视资源
  • vmstat 监控虚拟内存,进程,CPU
  • C++: 内联函数
  • ctfshow web72
  • 你想要一个什么样的gpt?高准确度和可靠性 问题解答 自主完成任务(智能体) 解决贫困 战争 难题 公平的价值体系
  • VUE中一些概念的理解
  • 【ArcGIS遇上Python】python实现批量XY坐标生成shp点数据文件
  • 【C语言】(7)输入输出
  • 数据结构——链式二叉树
  • SpringSecurity笔记
  • 常见递归算法题目整理
  • 安全小记-Ngnix负载均衡
  • CI/CD
  • window下如何安装ffmpeg(跨平台多媒体处理工具)
  • MySQL必看表设计经验汇总-上(精华版)
  • 扫雷游戏(C语言)
  • 五、MySQL的备份及恢复
  • 使用dockers-compose搭建开源监控和可视化工具
  • 浏览器——HTTP缓存机制与webpack打包优化
  • STM32duino舵机控制-2
  • 【知识---如何创建 GitHub 个人访问令牌】
  • GBASE南大通用分享-ConnectionTimeout 属性
  • ChatGPT 全域调教高手:成为人工智能交流专家
  • 5.Hive表修改Location,一次讲明白
  • 基于springboot校园台球厅人员与设备管理系统源码和论文
  • MySQL(下)
  • 如何搭建开源笔记Joplin服务并实现远程访问本地数据
  • 免费分享一套微信小程序外卖跑腿点餐(订餐)系统(uni-app+SpringBoot后端+Vue管理端技术实现) ,帅呆了~~