【MySQL数据库】 五

news2024/11/26 11:52:17

本文主要介绍了如果根据表之间的关系设计表,以及mysql的聚合/分组/联合查询. 

一.表的设计

实体和关系的四种关系

1.一对一

一个账号只能对应一个学生;

一个学生只能有一个账号;

比如:账号表和学生是一对一的关系

* 可以在账号表中引入学生id

* 也可以在学生表中引入账号id

2.一对多

一个学生只能在一个班级;

一个班级可以包含多个学生;

3.多对多

一个同学可以选择多门课程来学习;

一个课程可以被多个同学来选择;

往往表示多对关系,需要引入一个关联表

4.没关系

如果两个实体没有关系,那么两张表就完全独立,互不影响


上述这几种数据库表的设计方式都是最常见的.

二.查询高阶

1.insert+select

将select查询结果插入到另一个表中

要求查询的列的个数/类型和被插入的表一致

2.聚合查询

行和行之间的运算

>聚合函数

count( distinct 表达式 )

返回查询到的数据的数量

sum()

返回查询到的数据的总和,非数字无意义

avg()

返回平均值,非数字无意义

max()

返回最大值,非数字无意义

min()

返回最小值,非数字无意义

  • count

count(*) 如果是一行全空记录,仍然会被算在被

count(某列) 空值不会算在内

注意:count和( )必须要仅仅黏在一起,否在报错

  • sum

求和,把这一列的若干行,进行累加

只能针对数字进行相加

对字符串进行求和 , 没有效果,并且会产生警告

3.分组查询

上述的聚合函数是把表中的所有行都放在一起

有的时候,希望把数据进行分成多组来进行计算

Group by子句

指定一个列,按照这一列进行分组 ; 这一类中,数值相同的行,会被分到一组

每个分组都都可以使用上述的聚合函数进行计算

计算1班和2班的语文/数学平均分(以班级分组)

select中指定的列必须是必须是group by 指定的列 ,

如果select中想用其他的列,其他列必须放到聚合函数中, 否则此时查询的结果无意义.

比如 name只是分组的第一个代表,它实际上并没有什么意义

分组查询,也可以搭配条件来使用

1.分组之前的条件

where

2.分组之后的条件

having

1.分组之前的条件

比如,在分组之前有一个排除张三的条件

2.分组之后的条件

分组之后的条件也要搭配聚合函数来使用 !!

比如求每个班级的语文平均分>70的

3.同时包含分组前的条件和分组后的条件

求每个班级除去张三之后的平均分>70的班级

在实际开发中,可能会涉及到一些比较复杂的sql, 但是sql写复杂了其实是不好的

可读性不好和执行效率都可能比较差 , 不建议写太复杂的sql  ! 

4.联合查询

也叫多表查询 , 最复杂的写法

3.1 内连接

select  字段 from 1 , 2 where 连接条件 and 其他条件

或者

select  列名 from 1  inner join  2 on 连接条件 and 其他条件

(用inner join/join来连接表 , 用on来表示连接条件 )

eg.

笛卡尔积(数学上的运算)

就是把两个表的记录,按照排列组合的方式,构造成一个更大的表

笛卡尔积的列数: 两个表的列数之和

笛卡尔积的行数: 两个表的行数之积

针对任意两张表都可以计算笛卡尔积

笛卡尔积是一个非常低效的操作,尤其是表的本身的记录比较多的情况

笛卡尔积中有些数据是符合实际情况的,有些事不符合实际情况的

所以需要用连接条件来筛选符合实际情况的数据


示例:

a.两个表进行笛卡尔积

将学生表和班级表进行笛卡尔积

b.指定连接条件

增加连接条件

如果是多表查询,条件中最好写作  表名.列名   的形式

笛卡尔积+必要的条件= >多表联合查询


  • 查询lisi同学的所有成绩

  • 求每个学生的总成绩

  • 求每个学生选了几门课

  • 查询所有同学的成绩,课程名字和分数(三张表进行笛卡尔积)

注意此处能够写出连接条件是因为这几个实体之间存在关联关系

3.2外连接

join on 还可以表示外连接

外连接 VS 内连接

1.

左侧表的每一条记录,都能在右侧找到对应;

右侧表的每一条记录,也能在左侧找到对应;

此时,这两个表,进行内连接和外连接的结果完全相同 ;

2.

此时这张表并不是相互一一对应的

内连接产生的结果,一定是两个表中都存在的数据 (公共的部分)

外连接在mysql里有两种情况 ,左外连接 / 右外连接 left join / right join

1.左外连接 . 就是以左侧的表为主.

左侧表的每个记录都会在最终结果里 ;

如果某条记录左侧有,而右侧没有,就把对应的列设为空值

2.右外连接,以右侧的表为主

还有一种outer join 全外连接,就是左外连接和右外连接求并集 (mysql不支持)


注意:

多表联合查询的使用,一定要克制 , 既会影响到运行效率,又会影响到开发效率 (可读性差)  , 所以千万不要以写复杂sql为荣!

 3.3 自连接

本质上是自己和自己做笛卡尔积,本质是把行之间的关系转换为 列之间的关系

SQL中编写条件,条件都是列和列之间进行比较 , 但是SQL无法进行行和行之间的比较, 但是 把行转换成列 就好办了

 *  计算1号课程成绩小于2号课程成绩的同学

2.4子查询

日常开发中,使用子查询,更要克制!

*   查询和张三同学同班的同学

就相当于套娃 ,把两个sql 套在一起

不建议这么写 ,开发效率和可读效率都不高.

注意: in / exsits 也是可以使用的

2.5合并查询

union/union all 合并查询,把多个select查询到的结果集合合并成一个集合

合并的前提是两个查询的结果集,列是对应的

or也是把一些结果合并出来,只能局限在一个表里,

union可以针对任意连个表;

总结:

红框重点掌握,面试考察!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

能链智电,“重”症在身

文 | 智能相对论 作者 | 陈选滨 在过去的1-9月,充电基础设施增量为243.2万台,新能源汽车销量627.8万辆,充电桩与新能源汽车的增量比为1:2.6,距离工信部此前提出“2025年实现车桩比2:1,2030年实现车桩比1:…

自主SSL品牌—JoySSL

JoySSL是一家为数不多的中国自主品牌SSL证书服务厂商,是自研推出的新一代https数字证书。 它不仅有着自己品牌JoySSL,还拥有着国内外绝大数主流证书品牌,遍寻诚意伙伴,单域名证书都是不限年限、不限证书张数不限量提供。 目前了…

C语言——计算n的阶乘

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i;int n 0;int s1;scanf("%d",&n);for(i1; i<n; i){s*i;}printf("s%d\n",s);return 0; }

HP电脑主机清除BIOS密码

HP电脑主机清除BIOS密码 重装系统肯定不能清除BIOS密码的。 拔掉电池一般也只能是将BIOS设定恢复出厂。 台式机需要清除BIOS密码&#xff0c;一般是主机板上会有对应的跳线&#xff0c; 关机&#xff0c;记住跳线的预设位置&#xff0c;拔掉跳线&#xff0c;重新开机&#x…

于道 - 前端项目启动步骤参考

1. 安装 启动过程有9个步骤&#xff1a; 1.1 安装 Node JS , V18版本的 &#xff08;安装步骤省略&#xff09; 1.2 安装 npm install -g yarn &#xff0c;node JS里边好像自带npm &#xff0c;通过npm的命令安装 yarn 1.3 切换到项目中去安装&#xff0c;npm install &a…

C++初阶 | [二] 类和对象(上)

摘要&#xff1a;class&#xff0c;成员函数&#xff0c;成员变量&#xff0c;类的大小&#xff0c;this 指针 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象…

吃啥大转盘

经常跟朋友出去吃饭&#xff0c;选择太困难了所以写了个简单的转盘&#xff0c;直接copy到txt文本然后把文件后缀改成html即可。 需要换食物直接在文件中找到 list 值按照格式替换一下即可。 效果&#xff1a; 代码块&#xff1a; <html><head><meta http-…

软件测试简历原来是写了这些才让面试官已读不回

前言&#xff1a; 马上就到了面试跳槽涨薪好时候了&#xff0c;最近看很多的小伙伴已经开始投简历了&#xff0c;一天投了几十次几百次&#xff0c;面试官已读不会&#xff0c;面试的机会都没有更别说后面的事情的&#xff0c;这是为什么呢&#xff1f; 很大一部分的原因是的…

内网穿透工具之花生壳(二)

目录 开始教程 第一步&#xff1a;进入管理官网&#xff0c;注册并登录账号 第二步&#xff1a;进入 管理页面 第三步&#xff1a;添加映射表&#xff0c;然后填写一下基本内容 总结&#xff1a;emmm,反正都很快上手&#xff0c;但是这个就免费1G流量,这个免费的还是https…

开发知识点-NodeJs-npm/Pnpm/Vite/Yarn包管理器

包管理器 vue-cli-service 不是内部或外部命令&#xff0c;也不是可运行的程序npm 全局变量pnpmPnpm介绍ViteYarn ‘vue-cli-service’ 不是内部或外部命令&#xff0c;也不是可运行的程序 yarn yarn add vue-amap yarn add vue-amap ant-design-vue npm 全局变量 换主机 新…

掌动智能:云可观测性的主要特点及应用场景

云全景可观测性安全平台是一个跨架构、跨平台的可观测性方案&#xff0c;实现对云环境下的细粒度数据可视化&#xff0c;满足安全部门对云内部安全领域的多场景诉求&#xff0c;包括敏感数据动态监管、云网攻击回溯分析、攻击横移风险监控、云异常流量分析。本文将介绍掌动智能…

vue:如何实现通过判断数组中每个对象的其中一个属性,从而更改另一个属性的值

1、假设一个box为一个包含多个对象的数组&#xff0c;这个box数组可以在方法中定义也可以在data域中定义 let box [{ id: 1, status: 审批中 },{ id: 2, status: 已通过 },{ id: 3, status: 未通过 } ];2、在methods域中写一个方法遍历这个box数组判断每个对象中的status属性是…

【原创】java+swing+mysql校园零食商城设计与实现

摘要&#xff1a; 本文探讨了一个校园零食商城的设计与实现&#xff0c;校园零食商城的设计与实现旨在为学生提供一个方便、快捷的在线购买零食的环境&#xff0c;同时提高商家的销售效率和客户满意度。通过不断优化和完善系统&#xff0c;相信可以为校园内的学生和商家带来更…

接口自动化面试题

1.http请求都包含哪些内容&#xff0c;请求头和请求体有哪些内容 请求行/请求头/请求体/空行 请求行&#xff1a;请求方法字段、URL字段、http协议版本 例如&#xff1a;GET /index.html HTTP/1.1 请求方法&#xff1a;GET、POST、PUT、DELETE、OPTIONS、TRACE、CO…

【PG】PostgreSQL13主从流复制部署(详细可用)

目录 版本 部署主从注意点 1 主库上创建复制用户 2 主库上修改pg_hba.conf文件 3 修改文件后重新加载配置使其生效 4 主库上修改配置文件 5 重启主库pg使参数生效 6 部署从库 7 备份主库数据至从库 停止从库 备份从库的数据库目录 新建数据库数据目录data 创建和…

干货 | 接口自动化测试分层设计与实践总结

接口测试三要素&#xff1a; 参数构造 发起请求&#xff0c;获取响应 校验结果 一、原始状态 当我们的用例没有进行分层设计的时候&#xff0c;只能算是一个“苗条式”的脚本。以一个后台创建商品活动的场景为例&#xff0c;大概流程是这样的(默认已经是登录状态下)&#…

Python--快速入门三

Python--快速入门三 1.Python列表 列表是Python用于储存一系列数据的容器(特点是可以存放不同类型的数据) python_list ["键盘",True,66,88.8] 列表是可变数据类型&#xff0c;可以直接对列表中的元素进行更改而不需要赋值给本身 列表方法&#xff1a; 1.appen…

纯干货:赝势的选择 | VASP计算入门教程,真的超级有用

VASP软件是基于贋势和平面波基组的第一性原理密度泛函计算程序。VASP使用的是平面波基组&#xff0c;电子与原子核之间的相互作用使用投影缀加波贋势&#xff08;Projector Augmented Wave&#xff0c;PAW&#xff09;方法描述&#xff0c;从而进行量子力学计算。VASP采用PAW贋…

成绩公布方式,这样操作更方便

老师们&#xff01;又到了期中&#xff0c;是不是又在为如何安全、高效的公布学生成绩而烦恼呢&#xff1f;别担心&#xff0c;今天我就给大家分享几种超实用的成绩公布方式&#xff0c;不仅减轻了你的工作负担&#xff0c;还能让学生和家长们也方便&#xff01; 1 Excel表格&a…

【Android Studio】Android Studio修改代码编辑区(工作区)背景色

Android Studio 字体大小及背景色的设置 1、 打开File—>Settings 或者 Android Studio—>CtrlAlts 2、 在setting对话框中选中“Editor->Colors&Fonts->Font &#xff0c; 点击Save as,自定义一个主题,选择字体&#xff0c;size和行间距&#xff0c;保存。 3…