【SQL】语句练习

1. 更新

1.1单表更新

例1: 所有薪水低于30000的员工薪水增加10%

SQL命令: update employee set salary=salary*1.1 where salary < 30000;

1.2多表更新

例1: 将下图两表张三的语文成绩从95修改为80

SQL命令: update exam set score=80 where subject ="语文" and scode in (select code from student where name="张三"); 

2.查询

2.1单表查询

题型1: 基本选择查询
1.查询所有员工的name和salary

SQL命令: select name,salary from employee;

题型2: 条件查询
1.查询salary高于5w的员工姓名和薪水

SQL命令: select name,salary from employee where salary>50000;

2.查询数学成绩和英语成绩都大于80分的学生姓名

SQL命令:select name from student_05 where m_score > 80 and english_score>80;

3.找出在运营部且薪水在2w-7w之间的员工姓名和薪水

SQL命令: select name,salary from employee where department="运营部" and salary between 20000 and 70000;

4. 匹配员工name中以"李"开头的name和部门

SQL命令: select name,department from employee where name like '李%';

5. 查询name为张三或李四的信息

SQL命令: select * from student where name ="张三" or name="李四";

题型3: 分组和聚合函数结合
1.查询每个部门的平均薪水/部门最高薪水/员工人数

SQL命令求平均薪水: select department,avg(salary)  as avg_salary from employee group by department;

SQL命令求最高薪水:select department,max(salary) as max_salary from employee group by department;

SQL命令求员工人数:select department,count(*) from employee group by department;

2.查询每个学生的总成绩

SQL命令求总成绩:select name,sum(score) as sum_score from student_02 group by name;

例4: 下表中查询至少有一科分数大于80的学生总数

SQL命令1: select count(distinct(name)) from student_02 where score > 80;

SQL命令2:   select count(distinct CASE WHEN score>80 THEN name END) as num from student_02;

例5: 下表中查询学生每门课程分数大于80分的学生姓名

SQL命令1: select name from student_02 group by name having min(score)>80;

SQL命令2: select distinct name from student_02 where name not in (select distinct name from student_02 where score<80);

例6: 查询出同一学生的课程1分数小于课程2分数的学生ID

思想:自连接,其中关键是学生自身比

SQL命令: select s_id from student_04 as s inner join student_04 as s1 on s.s_id=s1.s_id where s.cid=1 and s1.cid=2 and s.score< s1.score;

例8: 查询薪水最高的2位的姓名和薪水,按照薪水降序排列

SQL命令: select name,salary from employee order by salary desc limit 2 ;

例9: 显示姓名,薪水和新列salary level.低于2w显示为low,2w-4w为medium

SQL命令: select name,salary, CASE WHEN salary<20000 THEN 'low' WHEN salary between 20000 and 40000 THEN 'medium' ELSE 'high' END as salary_level from employee;

例10: 查询薪水第2高的

SQL命令: select salary from salary order by salary desc limit 1,1;

例11:查询出学过课程1和3的学生ID

SQL命令: select s_id from student_04 where cid in (1,3) group by s_id having count(distinct cid)=2;

例12: 查询每科的平均成绩并按照平均成绩升序,如果一样,则按照课程id降序

SQL命令: select cid,avg(score) as avg_score from student_04 group by cid order by avg_score,cid desc;

-----------------------------------------------------------------------------------

2.2多表查询

例1:  求出每个部门的名称以及平均薪水

SQL命令(以departments为主):select d.department_name,avg(e.salary) from employee as e join departments ad d on e.department_id=d.department_id group by d.department_name

例2: 显示所有部门的名称和部门员工数包括没有员工的部门

SQL命令: select d.department_name,count(e.employee_id) from departments d left join employee e on d.department_id=e.department_id group by d.department_name;

例3: 

求1: 用户user_id,nickname和消费总额前5名

思想:以shop_record为主表,将三张表连接分别获取user_info的user_id,nickname以及commodity_info的price; 通过group by分组保证唯一用户

SQL命令:select u.user_id,u.nickname,sum(s.num*c.price)  as total from shop_record as s join user_info as u on s.user_id=u.id join commodity_info as c on s.c_id=c.id group by u.user_id,u.nickname order by total desc  limit 5;

例4:查询出每个学生的最高分以及课程名

思想: 通过自连接实现,其中关键是学生自身比

SQL命令: select s.name,s.course,s.score from student_02 as s join (select name,max(score) as max_score from student_02 group by name) as s1 on s.name=s1.name and s.score=s1.max_score;

-----------------------------------------------------------------------------------

2.3子查询

例1: 找出salary高于部门平均薪水的所有员工姓名

SQL命令: select name from employee e where salary >(select avg(e2.salary) from employee e2 where e2.department_id=e.department_id);

        外层查询员工姓名;内层查询每个员工所在部门的平均薪水

3.删除

例1: 删除employee表中所有部门为【研发部】的员工记录

SQL命令: delete from employee where department="研发部";

扩展:

  • 窗口函数

    • RANK() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... )  为每行分配一个排名,遇到同排名则跳过
      • 参数PARTITION,用于将数据按指定列分组,每个分组内的排名是独立计算的。类似于 GROUP BY,但它不会减少结果集的行数。
      • 例题:查询出每个学生的最高分以及课程名
        • SQL命令: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/937802.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯刷题——day6

蓝桥杯刷题——day6 题目一题干解题思路代码 题目二题干解题思路代码 题目一 题干 小明发现49很有趣&#xff0c;首先&#xff0c;它是个平方数。它可以拆分为4和9&#xff0c;拆分出来的部分也是平方数。169 也有这个性质&#xff0c;我们权且称它们为&#xff1a;拼接平方数…

SQL中的联结表

本文介绍什么是联结&#xff0c;为什么使用联结&#xff0c;以及如何编写使用联结的SELECT语句。 1. 联结 SQL最强大的功能之一就是能在数据查询的执行中联结&#xff08;join&#xff09;表。联结是SQL的SELECT能执行的最重要的操作&#xff0c;理解联结及其语法是学习SQL的…

.Net WebAPI(一)

文章目录 项目地址一、WebAPI基础1. 项目初始化1.1 创建简单的API1.1.1 get请求1.1.2 post请求1.1.3 put请求1.1.4 Delete请求 1.2 webapi的流程 2.Controllers2.1 创建一个shirts的Controller 3. Routing3.1 使用和创建MapControllers3.2 使用Routing的模板语言 4. Mould Bind…

SQL在线格式化 - 加菲工具

SQL在线格式化 打开网站 加菲工具 选择“SQL 在线格式化” 或者直接访问 https://www.orcc.online/tools/sql 输入sql&#xff0c;点击上方的格式化按钮即可 输入框得到格式化后的sql结果

vs 调试

常用&#xff1a; 调试->窗口-> 断点 监视 自动窗口 局部变量 调用堆栈 内存 反汇编&#xff08;也可以右键&#xff0c;转到反汇编&#xff09; 寄存器 快捷键&#xff1a; F5:启用调试&#xff0c;经常用来跳到下一个断点处 F9创建断点和取消断点。断点的重要作用&…

25. 深浅拷贝

一、什么是浅拷贝 只对对象的最顶层进行的拷贝称为 浅拷贝。我们可以用 copy 模块中的 copy() 方法实现浅拷贝。 import copya [11, 22, 33] b [44, 55, 66] c [a, b] d copy.copy(c)print(f"c: {c}") print(f"d: {d}") print(f"c d: {c d}&q…

docker简单命令

docker images 查看镜像文件 docker ps -a 查看容器文件 docker rm 0b2 删除容器文件&#xff0c;id取前三位即可 docker rmi e64 删除镜像文件&#xff08;先删容器才能删镜像&#xff09;&#xff0c;id取前三位即可 在包含Dockerfile文件的目录…

【Java】4、虚拟机 JVM

目录 Java内存区域详解(重点) JVM垃圾回收详解(重点) 类文件结构详解 类加载过程详解 类加载器详解(重点) 最重要的JVM参数总结 JDK监控和故障处理工具总结 JVM线上问题排查和性能调优案例 参考&#xff1a; JVM 核心技术 32 讲 深入浅出 Java 虚拟机

谷歌浏览器的无障碍功能介绍

在数字化时代&#xff0c;互联网已经成为人们生活中不可或缺的一部分。然而&#xff0c;并不是所有人都能平等地享受网络带来的便利。为了帮助有特殊需求的人士更好地访问和使用网络内容&#xff0c;谷歌浏览器推出了一系列无障碍功能。这些功能旨在提升视力障碍、听力障碍及其…

3D 生成重建035-DiffRF直接生成nerf

3D 生成重建035-DiffRF直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 本文提出了一种基于渲染引导的三维辐射场扩散新方法DiffRF&#xff0c;用于高质量的三维辐射场合成。现有的方法通常难以生成具有细致纹理和几何细节的三维模型&#xff0c;并且容易出…

从斯柯达和大众汽车安全漏洞事件剖析谈软件安全设计

一、事件概述 2022年&#xff0c;斯柯达和大众汽车被曝出存在一系列安全漏洞&#xff0c;这一事件引起了广泛关注。据估算&#xff0c;这些漏洞可能涉及超过 140 万辆汽车&#xff0c;涵盖斯柯达速派 III&#xff08;Skoda Superb III&#xff09;、斯柯达柯珞克&#xff08;S…

Hyperledger Fabric 2.x 环境搭建

Hyperledger Fabric 是一个开源的企业级许可分布式账本技术&#xff08;Distributed Ledger Technology&#xff0c;DLT&#xff09;平台&#xff0c;专为在企业环境中使用而设计&#xff0c;与其他流行的分布式账本或区块链平台相比&#xff0c;它有一些主要的区别。 环境准备…

OpenIPC开源FPV之Adaptive-Link天空端代码解析

OpenIPC开源FPV之Adaptive-Link天空端代码解析 1. 源由2. 框架代码3. 报文处理3.1 special报文3.2 普通报文 4. 工作流程4.1 Profile 竞选4.2 Profile 研判4.3 Profile 应用 5. 总结6. 参考资料7. 补充资料7.1 RSSI 和 SNR 的物理含义7.2 信号质量加权的理论依据7.3 实际应用中…

metinfo的csrf漏洞复现

http://localhost/metinfo/install/index.php 管理员admin登录 抓修改信息包 进入点击受害链接 localhost/333.html 管理员被修改密码原来root错误被强制退出 输入密码123456登录正常

jclasslib Bytecode Viewer 安装

IDEA 2023.1.3 Settings->Plugins->Marketplace&#xff0c;搜索jclasslib Bytecode Viewer, install,apply 选中你所要分析的类&#xff0c;view->show bytecode with jclasslib gaoding

智能高效的IDE GoLand v2024.3全新发布——支持最新Go语言

GoLand 使 Go 代码的阅读、编写和更改变得非常容易。即时错误检测和修复建议&#xff0c;通过一步撤消快速安全重构&#xff0c;智能代码完成&#xff0c;死代码检测和文档提示帮助所有 Go 开发人员&#xff0c;从新手到经验丰富的专业人士&#xff0c;创建快速、高效、和可靠的…

Android学习路线图

‌Android系统的开发始于2003年&#xff0c;最初由安迪鲁宾在危险公司&#xff08;Danger, Inc.&#xff09;开发。2005年&#xff0c;Google收购了危险公司&#xff0c;并将其移动开发团队纳入旗下。2007年&#xff0c;Google正式发布了Android的第一个版本&#xff0c;并随后…

【含开题报告+文档+PPT+源码】基于微信小程序的旅游论坛系统的设计与实现

开题报告 近年来&#xff0c;随着互联网技术的迅猛发展&#xff0c;人们的生活方式、消费习惯以及信息交流方式都发生了深刻的变化。旅游业作为国民经济的重要组成部分&#xff0c;其信息化、网络化的发展趋势也日益明显。旅游论坛作为旅游信息交流和分享的重要平台&#xff0…

CTFshow-php特性(Web89-115)

CTFshow-php特性(Web89-115) Web89&#xff08;intval&#xff09; <?php include("flag.php"); highlight_file(__FILE__);if(isset($_GET[num])){$num $_GET[num];if(preg_match("/[0-9]/", $num)){die("no no no!");}if(intval($num))…

ip地址获取失败啥意思?ip地址获取失败怎么回事

在日常的网络使用中&#xff0c;我们时常依赖于稳定的IP地址来确保数据的顺畅传输和设备的正常识别。然而&#xff0c;有时我们会遇到“IP地址获取失败”的困扰&#xff0c;这不仅阻碍了我们的网络访问&#xff0c;还可能带来一系列的网络连接问题。那么&#xff0c;IP地址获取…