从零开始的MySQL(2)

news2025/4/13 3:51:16

目录

  • 1.数据库约束
    • 1.1 unique
    • 1.2 not null
    • 1.3 default
    • 1.5 primary key
    • 1.6 foreign key
  • 2. 将A的记录插入到B中
  • 3.聚合函数
    • 3.1 count()函数
    • 3.2 sum()函数
    • 3.3 avg()函数
    • 3.4 max()函数
    • 3.5 MIN()函数
    • 3.6 group by
  • 4.联合查询
    • 4.1 内连接
    • 4.2 外连接
    • 4.3 自连接
    • 4.4 子连接

1.数据库约束

    约束就是数据库在使用的时候,对于里面能够存的数据提出的要求和限制.程序猿就可以借助约束来对数据完成更好的校验.

  数据库约束类型:

  1.not null,指示某列不能存储 NULL 值,如果插入了空值会报错.

  2.unique,保证某列的每行必须有唯一的值,如果插入了重复的值,就会报错

  3.default,约定一个默认值

  4.primary key,主键约束,相当于数据唯一的身份标识,类似于身份证号

  5.foreign key,外键,表示两个表之间的关联关系,表1里的数据要存在于表2之中.

  6.check,制定一个条件,根据条件来判断,但是MySQL不支持这个约束.

  7.上述提到的约束是根据每个列来单独设置的,不同列之间没有影响

1.1 unique

在这里插入图片描述

1.2 not null

    not null 可以给多列设置,而不只是单单一列.
在这里插入图片描述
在这里插入图片描述

1.3 default

在这里插入图片描述
在这里插入图片描述
    我们可以把默认值改成自己想要的内容,在创建表的时候,在default后面添加想要的名称.

在这里插入图片描述
在这里插入图片描述

1.5 primary key

    对于一个表来说,只能有一列被设置为主键
在这里插入图片描述
    主键不能为空,也不能被重复插入.
在这里插入图片描述
   关于主键,典型的用法就是使用1,2,3,4这样整数自增的方式来进行,MySQL内置了自增主键
在这里插入图片描述
   当设定好自增主键之后,插入记录时,我们就可以不指定主键的值(里面可以通过null来表示),交给MySQL自行处理即可,依靠自增主键来分配.
在这里插入图片描述
在这里插入图片描述

    如果我们手动指定了自增主键的值,那么之后插入的数据都会根据手动指定值之后的值来增加,比如下图手动指定了20,那么3-20之间的值都用不了了,从21开始.
在这里插入图片描述

1.6 foreign key

    外键用于关联其他表的主键或唯一键

foreign key (字段名) references 主表(列)

    比如我们要创建一个学生表和班级表,可以得出一个班级包含多个学生,多个学生属于一个班级,学生表依赖班级表,学生表称为字表,班级表称为父表.
创建班级表:

在这里插入图片描述
在这里插入图片描述
    创建学生表,关联班级表,外键约束描述的是两张表的两个列之间的“依赖关系",子表依赖于父表(子表用自父表),要求子表中对应的记录得在父表中存在:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
    这条记录中,指定的 classld 为 5,在 class 表中不存在, 不能插入成功
在这里插入图片描述外键约束的工作原理:
在子表中插入新的记录的时候,就会先根据对应的值,在父表中先查询,查询到之后,才能够执行后续的插入,这里的查询操作,可能是一个成本较高的操作(比较耗时),外键约束其实要求父表中被依赖的这一列,必须要有索引有了索引就能大大的提高查询速度,class 表的 classld 这一列,得是 primary key或者 unique(有了这俩约束的列, 就会自动的创建出索引了)

2. 将A的记录插入到B中

在这里插入图片描述
在这里插入图片描述

3.聚合函数

在这里插入图片描述

3.1 count()函数

在这里插入图片描述

select count(*) from exam;

    COUNT(*) 计算表中的总行数,不管某列是否有数值或者为空行。就相当于是针对 select * from exam result的结果集合进行计算行数,这里的count不一定就要写 * 号,也可以是列名,COUNT(字段名) 计算指定列下总的行数,计算时将忽略空值的行,NULL值没有记录其中。
在这里插入图片描述
在这里插入图片描述

3.2 sum()函数

    SUM()是一个求总和的函数,返回指定的列值的总和,SUM()函数在计算时,忽略列值为NULL的行
在这里插入图片描述
    sum()只能针对数字相加,不能针对字符串使用
在这里插入图片描述
    涉及到where时会先进行条件筛选,再进行聚合运算。
在这里插入图片描述

3.3 avg()函数

    AVG()函数通过计算返回的行数和每一行数据的和,求得指定列数据的平均值,计算 avg 的时候NULL 这样的记录是不计入其中的,不会影响到平均值的结果
在这里插入图片描述

3.4 max()函数

    MAX()返回指定列中的最大值
在这里插入图片描述

3.5 MIN()函数

    MIN()返回查询列中的最小值
在这里插入图片描述

3.6 group by

    group by会将这张表先分组,分组之后针对每一组进行聚合函数。
在这里插入图片描述

在这里插入图片描述
    group by 是可以使用 where. 只不过 where 是在分组之前执行.如果要对分组之后的结果进行条件筛选,就需要使用 having,比如我们指定分组之前指定条件:求去掉马云之后每种角色的平均薪资

select role,avg(salary) from emp where name != '马云' group by role 

这里就是先去掉马云然后再分组.(分组之前指定的条件就要使用 where)
在这里插入图片描述
    分组之后指定条件筛选:
求每种角色,平均薪资,只保留平均薪资 1w 以下,
这里就是得先分组计算,知道了平均工资,才能进一步的筛选,(分组之后,指定的条件,就需要使用 having 了),此时我们可以看到很明显的看到,董事长这个平均薪资超过 1w 的记录已经没有了

select role,avg(salary) from emp group by role having avg(salary) <10000;

在这里插入图片描述

4.联合查询

    联合查询,把多个表的记录往一起合并,一起进行查询,会用到笛卡尔积
    笛卡尔积的计算非常简单,就类似于排列组合,笛卡尔积是针对任意两张表之间进行的运算。笛卡尔积的运算过程:先拿第一张表的第一条记录和第二张表的每个记录,分别组合,得到了一组新的记录继续再拿第一张表的第二条记录重复刚才操作,如下图所示:
  针对A和B两张表,计算笛卡尔积此时笛卡尔积的列数,就是A的列数+B的列数,笛卡尔积的行数, 就是 A的行数*B 的行数.
 两张表中都有 classld 这一列.classld 的值对应相等的记录,其实就是应该要保留的记录,像这里的 classld 相等这样的条件, 就称为“连接条件",带有连接条件的笛卡尔积其实就是多表查询了.
在这里插入图片描述
 如果笛卡尔积中的两个列名字相同,在写条件的时候就可以通过表名.列名的方式来访问
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

4.1 内连接

    (1)查询“许仙”同学的 成绩
分析这样的问题,就要先想清楚 要查询的数据都来自于哪些表里
在这里插入图片描述
 实现刚才这个多表查询,直接 from 多张表,是一种写法,除此之外,还有另外一种写法基于 join on 这样的关键字也能实现多表查询

from 表1 join 表2 on 条件

在这里插入图片描述

4.2 外连接

    上面说的这个 from 多个表 where 写法叫做“内连接",使用join on 的写法既可以表示内连接还可以表示外连接

select列 from 表1 left join 表2 on 条件; 左外连接
select 列 from 表1 right join 表2 on 条件; 右外连接

    内连接会把共有的两个表中共有的数据展示出来
在这里插入图片描述
 left join 以左侧的表为主,会尽可能的把左侧的表的记录都列出来, 大不了后侧的表的对应列填成 NULL
在这里插入图片描述
  right join 也是类似,以右侧的表为主,尽可能把右侧的记录都列出来,大不了左侧的表对应的列填成 NULL
在这里插入图片描述

4.3 自连接

    自连接是指在同一张表连接自身进行查询
比如要显示所有“计算机原理”成绩比“Java”成绩高的成绩信息:在这里插入图片描述

4.4 子连接

    子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
查询与“不想毕业” 同学的同班同学:

select * from student where classes_id=(select classes_id from student where name='不想毕业');

在这里插入图片描述

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

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

相关文章

【简单易上手】昇思MindSpore邀你定制专属Diffusion模型

昇思MindSpore首个可训练diffusion模型DDPM马上要和大家见面了&#xff0c;操作简单&#xff0c;可训练推理&#xff0c;单卡即可运行&#xff0c;欢迎广大产学研开发者使用启智社区免费Ascend NPU算力体验 最近爆火的AI绘图&#xff0c;相信大家并不陌生了。 从AI绘图软件生成…

知识图谱的知识表示:向量表示方法

目录 从词向量到实体向量 知识图谱向量表示学习模型 TransE TransH TransR TransD TransX系列总结 DisMult 从词向量到实体向量 知识图谱的向量表示。有一类词是代表实体的&#xff0c;假如对这类实体词的向量做一些计算&#xff0c;比如用Rome向量减去Italy的向量&am…

使用界面组件Telerik ThemeBuilder研发主题,只需要这七步!

Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库&#xff0c;加快开发速度。Telerik DevCraft提供最完整的工具箱&#xff0c;用于构建现代和面向未来的业务应用程序。 ThemeBuilder是一个web应用程序&#xff0…

前端基础(一)_初识JavaScript

最开始的时候&#xff0c;浏览器只能显示文本和图片&#xff0c;并不能做各种动态的操作。 一、JavaScript的历史 1、网景公司的布兰登艾奇开发了js 2、借鉴了java的数据管理机制、c的函数 3、Js的创建是用来解决浏览器和用户之间互动的问题&#xff08;表单提交的问题&#…

LeanCloud 快速实现服务端

1. 实现与服务器交互平台 1.1 Google 平台的 Firebase (需要科学网络) Firebasehttps://firebase.google.cn/ 1.2 LeanCloud 平台 LeanCloudhttps://www.leancloud.cn/ 2. 配置信息 2.1 在 LeanCloud 控制台创建应用, 根据 SDK下载 开发指南配置应用 2.2 配置文件 build…

拉伯杠杆平台|新冠药龙头跳水,万亿产业开启新阶段!

依照此前发表的时间表&#xff0c;新修订的《体育法》将于2023年1月1日起正式施行。 12月27日早盘&#xff0c;A股前期大热的抗疫体裁呈现显着回落。熊去氧胆酸、新冠药、肝炎概念、新冠检测、生物疫苗等体裁跌幅较大。熊去氧胆酸、新冠药两大板块跌幅超过4%&#xff0c;抢手龙…

外贸采购管理对业务的影响及解决方案

在外贸企业中&#xff0c;采购环节的把控对整个业务环节都有影响。像是采购供应商是否能够按时到货&#xff0c;会直接影响生产进度&#xff1b;采购质量的好坏直接影响产品的生产进度及质量&#xff1b;采购成本的高低&#xff0c;直接影响产品的成本及利润&#xff1b;采购供…

NSUM 问题

目录标题两数之和两数之和 2&#xff08;多个结果集去重&#xff09;15. 三数之和两数之和 问题描述 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答…

基于Java(JSP)+MySQL实现(Web)学生成绩综合管理系统【100010065】

Java 课程设计:师生交流系统 1.1 课设题目 信息商务学院学生成绩综合管理系统的综合与开发 2.1 课设目的 《Java 程序设计》课程是计算机专业的一门专业必修课程&#xff0c;针对课程进行为期两周的实践教学&#xff0c;旨在提升本专业学生对此课程中的理论知识的综合应用能…

[Python学习系列] 走进Django框架

文章目录1. 安装django2. 创建项目&#xff08;命令的方式&#xff09;在第一次创建django项目需要做的&#xff1a;每一次创建django项目需要做的&#xff1a;3. 创建app4. 启动运行django项目程序5. 模板&静态文件的存放地址6. django中的模板语法7. django中常见的请求和…

ArcGIS基础实验操作100例--实验4矢量要素的镜像复制,缩放

实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验4 矢量要素的镜像复制&#xff0c;缩放 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&#xff09;加载【Mirror Features】工具 &#x…

VMware之安装Windows10系统

系统下载 下载地址&#xff1a;原版软件 (itellyou.cn) 创建虚拟机系统框架 在菜单栏中选择文件下的新建虚拟机 选择自定义&#xff0c;然后点击下一步 直接下一步 选择稍后安装操作系统&#xff0c;然后点击下一步 因为安装的系统是Windows&#xff0c;这里注意选择Microsof…

使用eBPF追踪Linux内核

简介 BPF&#xff0c;及伯克利包过滤器Berkeley Packet Filter&#xff0c;最初构想提出于 1992 年&#xff0c;其目的是为了提供一种过滤包的方法&#xff0c;并且要避免从内核空间到用户空间的无用的数据包复制行为。它最初是由从用户空间注入到内核的一个简单的字节码构成&…

浏览器:理解HTTP无状态与Cookie的使用

一、理解HTTP无状态 1.1、理解http无状态 http无状态是指协议对于用户身份、用户状态、用户权限、交互场景等没有记忆能力。简单讲就是不能识别用户。 1.2、http无状态的优点&#xff1a; 可以更快地处理大量的事务&#xff0c;确保协议的可伸缩性&#xff0c;减少服务器的…

一文搞定十大排序算法(动画图解)

排序的定义 排序&#xff0c;就是重新排列表中的元素&#xff0c;使表中的元素满足按关键字递增或递减的过程。为了査找方便&#xff0c;通常要求计算机中的表是按关键字有序的。 排序的确切定义如下&#xff1a; 算法的稳定性&#xff1a; 若待排序表中有两个元素 Ri 和 Rj&am…

包装类和简单认识泛型

目录 1.包装类 1.1基本数据类型和对应的包装类 1.2装箱和拆箱 1.3自动装箱和自动拆箱 2.什么是泛型 3.引出泛型 3.1语法 4.泛型类的使用 4.1语法 4.2类型推导 5.裸类型 5.1说明 6.泛型如何编译的 6.1擦除机制 6.2为什么不能实例化泛型类型的数组 7.泛型的上界 …

MaxKey单点登录认证系统3.5.12发布,重要漏洞修复

业界领先的IAM/IDaas身份管理和认证产品 概述 MaxKey单点登录认证系统&#xff0c;谐音马克思的钥匙寓意是最大钥匙,是业界领先的IAM/IDaas身份管理和认证产品,支持OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议&#xff0c;提供安全、标准和开放的用户身份…

STM32/51单片机实训day3——点亮LED灯、闪烁LED灯(二)实践

内 容&#xff1a;编写代码实现LED灯的点亮功能 学 时&#xff1a;2学时 知识点&#xff1a;分析原理图、LED灯控制原理 重点&#xff1a;GPIO参数配置、LED原理图分析 难点&#xff1a;编写 GPIO参数配置函数、LED点亮函数 时间&#xff1a;2022年12月21日 9:00&#xff5e;…

如何轻松做数据治理?开源技术栈告诉你答案

搭建一套数据治理体系耗时耗力&#xff0c;但或许我们没有必要从头开始搞自己的数据血缘项目。本文分享如何用开源、现代的 DataOps、ETL、Dashboard、元数据、数据血缘管理系统构建大数据治理基础设施。 元数据治理系统 元数据治理系统是一个提供了所有数据在哪、格式化方式…

vue2.0中集成并使用ueditor,解决第一次编辑器正常加载,第二次就不加载的问题,父组件调用子组件的方法

vue2.0中集成并使用ueditor 最近有项目需要使用编辑器&#xff0c;就找了一款百度的ueidtor编辑器&#xff0c;第一次用各种不会&#xff0c;所以记录一下 下面的链接就是ueditor的前后端的配置说明和API等 链接: ueidtor的API 下载ueidtor 下载最新版的1.5.0版本&#xf…