【MySQL探索之旅】数据库设计以及聚合查询

在这里插入图片描述

📚博客主页:爱敲代码的小杨.

✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》

❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️

🙏小杨水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 1. 数据库设计
    • 1.1 数据库设计基本概念
    • 1.2 数据库设计的步骤
    • 1.3 表设计
      • 1.3.1 一对一
      • 1.3.2 一对多
      • 1.3.3 多对多
  • 2. 聚合查询
    • 2.1 聚合函数
    • 2.2 分组查询
    • 2.3 条件过滤

1. 数据库设计

1.1 数据库设计基本概念

  • 数据库设计就是根据业务的具体需求,结合我们所学的 DBMS ,为了这个业务构造最优的数据存储模型。
  • 建立数据库中的表结构以及表与表之间的关联关系的过程。

1.2 数据库设计的步骤

  1. 需求分析(数据是什么?数据具有哪些属性?数据和属性之间的特点是什么)

  2. 逻辑分析(通过 ER图对数据库进行逻辑建模)

    image-20240407085211974

  3. 物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)

  4. 维护设计(1. 对新的需求进行建表;2. 表优化)

1.3 表设计

1.3.1 一对一

例如:人 和 身份证 的关系

一个人只能对应一个身份证号

image-20240407085627653

1.3.2 一对多

例如: 班级 和 学生 的关系

一个班级多个学生

image-20240407085731860

1.3.3 多对多

例如:学生 和 课程 的关系

一个学生可以选择多个课程

一个课程可以被多个学生选择

image-20240407092458971

案例:

  1. 创建学生表:学生 id ,姓名

    create table student(id int primary key auto_increment,name varchar(20)
    );
    
  2. 创建课程表:课程表,课程名

    create table course(courseId int primary key auto_increment,courseName varchar(20)
    );
    
  3. 创建关联表:学生和课程之间的关系,需要包含学生id 和课程id 作为外键。

    create table student_course(student_id int, course_id int,primary key (student_id, course_id), foreign key (student_id) references student(id), foreign key (course_id) references course(courseId));
    

2. 聚合查询

2.1 聚合函数

常见的统计总数、计算平局值等操作,可以使用聚合函数来实现,常见的聚合函数有:

函数说明
COUNT([DISTINCT] expr)返回查询的数据的数量
SUM([DISTINCT] expr)返回查询到的数据的总和,忽略非数值
AVG([DISTINCT] expr)返回查询到的数据的平均值,忽略非数值
MAX([DISTINCT] expr)返回查询到的数据的最大值,忽略非数值
MIN([DISTINCT] expr)返回查询到的数据的最小值,忽略非数值

案例:

  • count:计数

    -- 统计有多少位学生
    select count(*) from student;-- 统计学生表有多少个姓名,姓名为 NULL 不会计入结果
    select count(name) from student;
    

    image-20240407110627436

  • sum:总和

    -- 统计分数的总和
    select sum(score) from score;-- 统计分数小于70的总分,如果没有返回null
    select sum(score) from score where score<70;
    

    image-20240407111805677

  • avg:平均值

    -- 查询分数的平均值
    select avg(score) from score;-- 查询分数小于70的平均值,如果没有则返回 NULL
    

    image-20240407112027574

  • MAX:最大值

    -- 查询分数的最大值
    select max(score) from score;-- 查询60到90之间的最大值
    select max(score) from score where score>60 and score<90;-- 查询大于90的最大值,如果没有则返回 NULL
    select max(score) from score where score>90;
    

    image-20240407112339701

  • MIN:最小值

    -- 查询分数的最小值
    select min(score) from score;-- 查询分数在60到90之间的最小值
    select min(score) from score where score>60 and score<90;-- 查询分数在60以下的最小值,如果没有则返回 NULL
    select min(score) from score where score<60;
    

    image-20240407113012629

2.2 分组查询

select 中使用 group by 子句可以对指定列进行分组查询。需要满足:使用 group by 进行分组查
询时,select 指定的字段必须是“分组依据字段”,其他字段若想出现在 select 中则必须包含在聚合函
数中。

select column1, sum(column2), .. from table group by column1,column3;

案例:

测试表:职工表 id,name(姓名),role(职位),salary(工资)

create table emp(id int, name varchar(20), role varchar(20), salary int);insert into emp values (1,'张三','Java开发',10000);
insert into emp values (2,'李四','Java开发',9000);
insert into emp values (3,'王五','Web开发',8000);
insert into emp values (4,'赵六','Web开发',9000);
insert into emp values (5,'王麻子','运维',8500);
insert into emp values (6,'玛晕','老板',100000);
  • 查询每个岗位的最高工资、最低工资和平均工资

    select role,max(salary),min(salary),avg(salary) from emp group by role;
    

    image-20240407131309574

2.3 条件过滤

group by 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 where 语句,而需要用
having

  • 查询平均工资低于9000的职位和它的平均工资

    select role,max(salary),min(salary),avg(salary) from emp group by role having avg(salary)<9000;
    

    image-20240407131726751

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RIP配置不求人:手把手教你配置RIP路由

#教育优质作者发文挑战赛# 大家好&#xff0c;今天给同学们介绍一下RIP基本功能相关配置 01、基本概念 RIP是一种基于距离矢量&#xff08;Distance-Vector&#xff09;算法的协议&#xff0c;它使用跳数&#xff08;Hop Count&#xff09;作为度量值来衡量到达目的地址的距离…

企业必看:几个在线文档编辑器天花板

在线文档编辑器是企业工作必不可少的工具&#xff0c;不仅能够帮助企业实现高效协作&#xff0c;还能提升文档管理的便捷性和安全性。在众多在线文档编辑器中&#xff0c;有几个工具因其出色的性能和广泛的应用而备受瞩目&#xff0c;成为了企业使用的热门选择。接下来&#xf…

Driver not loaded之记录Qt访问MySql的解决经历

对于这个问题的本质原因&#xff0c;我也搞不明白&#xff0c;所以记录的方法不一定对所有人行之有效。我的目的很简单&#xff0c;就是把数据库用起来&#xff0c;经过查找网上资料&#xff0c;最终把数据库跑起来了。因此记录如下&#xff1a; 1&#xff0c;出现这个问题是缺…

基于单片机钢琴电子节拍器系统设计

**单片机设计介绍&#xff0c;基于单片机钢琴电子节拍器系统设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机钢琴电子节拍器系统设计是一个综合性的项目&#xff0c;它结合了单片机编程、音频处理、用户界面设计等多个领域的…

Master节点快照回退遇到的容器不存在的问题

这次遇到的问题说起来有点扯&#xff0c;k8s集群出了点问题&#xff0c;kuboard无法访问&#xff0c;查看容器状态后&#xff0c;初始问题简单的以为是kuboard出问题了&#xff0c;理论上来说重新安装kuboard即可&#xff0c; 由此问题引发的系统bug&#xff0c;导致master节点…

探索Flutter混淆在提高应用安全性方面的作用

在移动应用开发中&#xff0c;保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具&#xff0c;帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆&#xff0c;并提供了相关的操作步骤和注意事项。 &#x1f4dd; 摘要 本…

zabbix绑定钉钉进行通知,网页端添加JavaScript,无脑式操作

文章目录 前言一、编辑zabbix告警JavaScript脚本二、代码如下&#xff1a;编辑消息模板&#xff0c;自定义markdown格式的消息。 总结 前言 随着人工智能的不断发展&#xff0c;zabbix监控这门技术也越来越重要&#xff0c;一下进入正题。 一、编辑zabbix告警JavaScript脚本 没…

HarmonyOS实战开发-存储空间统计(仅对系统应用开放)

介绍 本示例通过应用程序包管理、应用空间统计与卷管理模块&#xff0c;实现了查看当前设备存储空间信息、所有安装的应用的存储信息、所有可用卷的存储信息的功能。 效果预览 使用说明&#xff1a; 1.主页面会展示当前设备存储使用的详细信息。 2.点击“应用”&#xff0c;…

身份证实名认证接口的价格一般是多少呢?基于PHP身份核验接口

身份证实名认证接口分为身份证二要素、三要素、三要素人像核验接口&#xff0c;被广泛的应用于婚恋、交友、电商等等一系列行业领域&#xff0c;身份证实名认证需要实时数据&#xff0c;对于数据源来说也需要可靠&#xff0c;那么&#xff0c;身份证实名认证的价格是不是很贵呢…

NetSuite Saved Search-当前库存快照查询报表(二)

之前第一篇文章我们说明了&#xff0c;如何利用Saved Search来制作一个能够显示批次物料与非批次物料的Lot信息以及On Hand在手数量的“当前库存快照查询报表”&#xff0c;但是当用户提出“我们能否再加上批次物料的效期”需求时&#xff0c;我们原有的Saved Search并不能达到…

基于RTThread的学习(三):正点原子潘多拉 QSPI 通信 W25Q128 实验

1、基于芯片创建工程 2、QSPI配置 2.1、RTThing_setting 设置组件 2.2、配置board.h 文件 2.3、cubemx生成QSPI的硬件初始化代码&#xff1b;HAL_QSPI_MapInit; 这里注意&#xff1a;你所买的开发板对应的qspi 连接的是否是cubemx 上边显示的&#xff0c;如果不是你需要将引脚…

27.WEB渗透测试-数据传输与加解密(1)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;26.WEB渗透测试-BurpSuite&#xff08;五&#xff09; BP抓包网站网址&#xff1a;http:…

Java基于微信小程序的校园外卖平台系统,附源码

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

34-4 CSRF漏洞 - CSRF跨站点请求伪造

一、漏洞定义 CSRF(跨站请求伪造)是一种客户端攻击,又称为“一键式攻击”。该漏洞利用了Web应用程序与受害用户之间的信任关系,通过滥用同源策略,使受害者在不知情的情况下代表攻击者执行操作。与XSS攻击不同,XSS利用用户对特定网站的信任,而CSRF则利用了网站对用户网页…

vue快速入门(十)v-bind动态属性绑定

注释很详细&#xff0c;直接上代码 上一篇 新增内容 图片切换逻辑动态绑定的完整写法与简写方法 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice…

10款白嫖党必备的ai写作神器,你都知道吗? #媒体#人工智能#其他

从事自媒体运营光靠自己手动操作效率是非常低的&#xff0c;想要提高运营效率就必须要学会合理的使用一些辅助工具。下面小编就跟大家分享一些自媒体常用的辅助工具&#xff0c;觉得有用的朋友可以收藏分享。 1.飞鸟写作 这是一个微信公众号 面向专业写作领域的ai写作工具&am…

【CSS】背景模糊,不模糊主体文字

问题 背景模糊&#xff0c;不模糊文本 效果图 t1 t2 t3 实现思路 自定义css变量存储图片地址&#xff0c;方便后期更改使用伪元素实现背景模糊达到不遮挡主体文本 transform: scale(1.5)吧图片放大1.5倍&#xff0c;避免设置背景模糊出现白边。 overflow: hidden 超出隐藏&…

如何让阿里云AI001号员工帮我写代码(含IDEA插件使用)

国内首个AI程序员入职阿里云&#xff1a;专属工号AI001&#xff0c;KPI是一人写完公司20%代码。 不管是真是假&#xff0c;AI 程序员发展的趋势是无法改变的&#xff0c;小米汽车发布会上&#xff0c;雷军说到小米汽车工厂的自动化率达到90%以上&#xff0c;有些车间甚至100%的…

携手博鳌亚洲论坛,五粮液“以和美,敬世界”

执笔 | 尼 奥 编辑 | 扬 灵 3月26-29日&#xff0c;以“亚洲与世界&#xff1a;共同的挑战 共同的责任”为主题的博鳌亚洲论坛2024年年会在海南博鳌盛大召开&#xff0c;聚集全球政商学媒等各国代表汇聚一堂&#xff0c;围绕投资亚洲未来、减少贸易碎片化、加速迈向零碳电…

程序员简历程序员简历.pdf

你们在制作简历时&#xff0c;是不是基本只关注两件事&#xff1a;简历模板&#xff0c;还有基本信息的填写。 当你再次坐下来更新你的简历时&#xff0c;可能会发现自己不自觉地选择了那个“看起来最好看的模板”&#xff0c;填写基本信息&#xff0c;却没有深入思考如何使简历…