MySQL 数据库的增删查改 (2)

news2024/12/24 8:09:14

文章目录

  • 一. 数据库约束
    • 1. 约束类型
    • 2.NULL 约束
    • 3.UNIQUE 约束
    • 4.DEFAULT 约束
    • 5. PRIMARY KEY 约束
    • 6.FOREIGN KEY 约束
  • 二.表的设计
  • 三.插入
  • 四.查询
    • 1.聚合查询
    • 2.联合查询
    • 3.合并查询

本篇文章继承与 MySQL 表的增删改查(1)

一. 数据库约束

1. 约束类型

NOT NULL -- 表示某一行不能存放 NULL 值.

UNIQUE -- 保证每列每行都有唯一的值
.
DEFAULT -- 用来规定列的默认初始值.

PRIMARY KEY -- NOT NULL 和 UNIQUE 的结合.**用来确保某列(或者多个列)有唯一表识**,有助于更加快速的找到列表中的特定记录值.

FOREIGN KEY -- 用来保证一个表中的数据匹配另一个表中的值的参照完整性.

2.NULL 约束

创建表时,指定某一列不可以为空.

在这里首先我们需要创建一个相关的表,如图:

在这里插入图片描述
这时我们插入元素,
在这里插入图片描述

3.UNIQUE 约束

创建表时,指定某一列的值不能重复出现.

创建一个相关的表,如图:
在这里插入图片描述

此时插入元素:

在这里插入图片描述

4.DEFAULT 约束

指定插入元素时,某一列为空时,默认值为 自己设定的元素

创建一个相关的表, 如图:

在这里插入图片描述
插入元素这里需要注意如下问题

在这里插入图片描述
这里如果要出现自定义的默认值,就不可以在设定元素处插入任何形式的元素

在这里插入图片描述

5. PRIMARY KEY 约束

称之为主键约束
主键字段: 在该字段上添加了主键约束.
主键值: 主键字段中的每一个值都叫做主键值.

这里我们创建一个相关的表:

在这里插入图片描述
在这里插入图片描述
对于整数类型的主键,常配搭自增 auto_increment 来使用。插入数据对应字段不给值时,使用最大值+1。

– 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
id INT PRIMARY KEY auto_increment

6.FOREIGN KEY 约束

用于关联其他表的主键的关键字.

foreign key (字段名) reference 主表(列).

首先创建一个班级表,

在这里插入图片描述

在这里插入图片描述
之后创建一个学生表,因为一个班级对应多个学生,一个学生对应一个班级. 所以使用 id 为主键,class_id 为外键,关联班级表 id.

在这里插入图片描述
在这里插入图片描述
此处外键的含义: 要求 student 里的 class_id 务必要在 class 表中的 id 列中存在.

二.表的设计

表的设计有以下三大范式

  1. 一对一
    在这里插入图片描述
  2. 一对多
    在这里插入图片描述
  3. 多对多

在这里插入图片描述
创建课程表:

在这里插入图片描述
在这里插入图片描述
创建学生中间课程表和考试成绩表

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

三.插入

这里实现了将一个表中的部分元素插入到另一张表中.

这里先创建了一个学生表,

在这里插入图片描述
创建一个用户表
在这里插入图片描述
将学生表中的部分元素复制到用户表

insert into test_user(name, email)select name, qq_mail from student;

在这里插入图片描述

四.查询

1.聚合查询

  1. 聚合函数
    常见的统计总数,计算平均值等操作,都可以使用聚合函数实现,常见的聚合函数有如下:

在这里插入图片描述

  • COUNT 查询到的元素个数

在这里插入图片描述

//统计班级中有多少学生
select count(*) from students;
select count(0) from students;

//统计班级中的email有几个人(这里count与括号之间不能有空格存在)
select count(email) from students;

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

  • SUM 查询到的元素数据之和

成绩表如下;

在这里插入图片描述

//统计数学成绩总分
select sum(math) from exam_result;

//统计不及格的总分 < 60 ,如果没有 返回null
select sum(math) from exam_result where math < 60;

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

  • AVG 统计平均分
select avg(chinese+math+english) 品均分 from exam_result;

在这里插入图片描述

  • MAX 返回最高分
// 返回英语的最高分
select max(english) from exam_result;

在这里插入图片描述

  • MIN 返回最小值
//返回语文中的最小值
select max(chinese) from exam_result;

//返回 >70 分以上的数学最低分
select min(math) from exam_result where math>70;

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

  1. GROUP BY 子句

select 中使用 group by 子句时,可以对指定的列进行分组查询.

满足条件: 使用 group by 进行分组查询时,select 指定的字段是 “分组依据字段”,其余字段若要出现在 select 中则必须要包含在 聚合函数中

: 所谓分组依据字段, 就是指该列元素是将各个对象划分出层次的字段

首先,创建一个测试表,

在这里插入图片描述
在插入对应的元素,

在这里插入图片描述

//查询每个角色的最高工资\最低工资和平均工资
select role,max(salary),min(salary),avg(salary) from emp group by role;

在这里插入图片描述

  1. HAVING 子句

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

// 显示平均工资低于1500的人与其平均工资
select role,max(salary),min(salary) from emp group by role having1 avg(salary)<1500;

在这里插入图片描述

2.联合查询

在实际开发中,数据往往来自不同的表,因此需要多表的联合查询.多表查询就是对多张表的数据取笛卡尔积

在这里插入图片描述
这里我们先建立几个之间有关联的表

班级表:
在这里插入图片描述
课程表:
在这里插入图片描述
成绩表:
在这里插入图片描述
学生表:
在这里插入图片描述

  1. 内连接

语法:

  • select 字段 from 表1 别名1 join 表2 别名2 on 连接条件 and 其他条件;
  • select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;

示例
(1) 查询许仙同学的成绩

select sco.score from student stu inner join score sco on stu.id=sco.student_id
and stu.name='许仙';

在这里插入图片描述

select sco.score from student stu, score sco where stu.id=sco.student_id and
stu.name='许仙';

在这里插入图片描述
(2) 查询所有学生的总成绩,以及学生的个人信息:
注: 查询的总成绩以学生的 id 进行分组

SELECT
 stu.sn,
 stu.NAME,
 stu.qq_main,
 sum( sco.score ) 
FROM
 student stu
 JOIN score sco ON stu.id = sco.student_id
GROUP BY
 sco.student_id;

在这里插入图片描述

  1. 外连接

外连接分为左外连接右外连接
如果联合查询, 左侧的表完全显示,我们就说是左外连接,反之是右外连接.

  • 左外连接,表1完全显示
    select 字段名 from 表名1 left join 表名2 on 连接条件;
  • 右外连接,表2完全显示
    select 字段 from 表名1 right join 表名2 on 连接条件;

左外连接:

select * from student stu left join score sco on stu.id=sco.student_id;

在这里插入图片描述
表1 student 表中的信息完全显示

右外连接:

select * from student stu right join score sco on stu.id=sco.student_id;

表2 score 表中的信息完全显示,同样,老外学中文因为没有成绩也就不显示其信息

在这里插入图片描述

  1. 子查询

子查询是指嵌套在其他 sql 语句中的 select 语句 , 也叫嵌套查询.

  • 单行子查询 : 返回一行记录的子查询.
select * from student where classes_id=(select classes_id from student where name = '不想毕业');

在这里插入图片描述

  • 多行子查询

[NOT] IN 关键字:

使用 in 关键字

select * from score where course_id in (select id from course where
name='语文' or name='英文');

在这里插入图片描述
在这里插入图片描述
使用 not in 关键字

select * from score where course_id not in (select id from course where
name!='语文' and name!='英文');

这里就是排除 指定的科目的成绩

在这里插入图片描述
[NOT] EXISTS 关键字

使用 EXISTS 关键字

select * from score sco where exists (select sco.id from course cou 
where (name='语文' or name='英文') and cou.id = sco.course_id);

在这里插入图片描述
使用 not exists
同理,显示除要求之外的信息

select * from score sco where not exists (select sco.id from course cou 
where (name!='语文' and name!='英文') and cou.id = sco.course_id);

在这里插入图片描述

3.合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。使用 UNION 和 UNION ALL 时,前后查询的结果集中,字段需要一致。

  • union
    该操作符用来获取两个结果的并集.使用该操作时会自动去除结果中重复的元素.
select * from course where id<3
union
select * from course where name='英文';

在这里插入图片描述

  • union all

该操作是用来取得两个结果的并集.当使用该操作符时, 不会去除掉结果中重复的元素.

如有不足,欢迎提出.如有问题,欢迎指正!

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

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

相关文章

下载安全证书到jdk中的cacerts证书库

最近在公司遇到访问https请求&#xff0c;JDK返回异常信息的问题。返回如下&#xff1a; java.lang.Exception: java.lang.Exception: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: u…

废弃阶段的风险评估

概述 风险评估应贯穿于评估对象生命周期 各阶段中。评估对象生命周期各阶段中涉及的风险评估原则和方法昆一致的&#xff0c;但由干各阶段实施内容对象、安全需求不同.使得风险评估的对象、目的、要求等各方面也有所不同。在规划设计阶段&#xff0c;通过风险评估以确定评估对…

线程安全介绍

线程安全 多线程程序处于一个多变的环境当中&#xff0c;可访问的全局变量和堆数据随时都可能被其他的线程改变。因此多线程程序在并发时数据的一致性变得非常重要。 竞争和原子操作 多个线程同时访问一个共享数据&#xff0c;可能造成很恶劣的后果。下面是一个著名的例子&a…

多数之和问题

文章目录多数求和问题1两数之和(无序)题解2两数之和(有序)题解3两数之和(二叉搜索树)题解4 三数之和题解5四数之和题解多数求和问题 针对给一组用例,和一个目标数target,求用例中多数相加等于target的所有数,且不能重复问题,一般有两种解法: 集合(不要求排序)双指针(要求排序…

万德L2接口代码执行工作的过程分享

在设计万德L2接口时&#xff0c;避免不了要用到 一些代码&#xff0c;今天小编来给各位分享一下万德L2接口代码执行工作的过程分享&#xff1a; 这里只分享部分功能执行的过程&#xff1a; OrderQueueRecord&#xff08;委托队列&#xff09; 字段名 类型 备注 stock_ex…

word文档

WORD行与行中间空出一行&#xff0c;怎么办&#xff1f; 这个情况又分两种情况&#xff1a; 第①种情况&#xff1a;行与行之间的空白行都多了一个回车符&#xff1a; Word中&#xff0c;当我们从网络上复制一些文本或者是拿到一些别人的文本&#xff0c;这种文本经常会有大…

自动切换背景的登录页面

自动切换背景的登录页面 有趣的小案例池子&#xff1a; JS实现定时器 JS实现关闭图片窗口 JS实现输入检验 获取焦点后隐藏提示内容的输入框 JS实现获取鼠标在画布中的位置 聊天信息框显示消息 JS点击切换背景图 自动切换背景的登录页面 JS制作跟随鼠标移动的图片 JS实现记…

电脑提示ISDone.dll错误怎么办?

在安装一些大型游戏时&#xff0c;容易出现ISDone.dll错误&#xff0c;那么这时我们该怎么办呢&#xff1f; 出现ISDone.dll错误的原因&#xff1f; ① RAM或硬盘空间不足&#xff0c;或内存和硬盘出现故障。 ② ISDone.dll和Unarc.dll文件损坏或丢失。 ③ 系统文件损坏。 …

JAVA基于局域网的聊天室系统(源代码+论文)

毕业论文 局域网聊天室系统的设计与实现 论文作者姓名&#xff1a;申请学位专业&#xff1a;申请学位类别&#xff1a;指导教师姓名&#xff08;职称&#xff09;&#xff1a;论文提交日期&#xff1a; 基于局域网的视频聊天室系统的设计与实现 摘 要 视频聊天系统作为一种…

Python 采集77个教学课件PPT模板

源码下载链接&#xff1a;ppt.rar - 蓝奏云 PPT下载链接&#xff1a;https://pan.baidu.com/s/1oOIO76xhSw283aHTDhBcPg?pwddydk 提取码&#xff1a;dydk 采集的参数 page_count 1 # 每个栏目开始业务content"text/html; charsetgb2312"base_url "https:…

6个赚钱法则,后悔知道晚了,赚钱是为了需要时说可以而不是考虑下

2023年也在措不及防的时刻开始了 无论哪年新年愿望清单里赚钱一直都在前三位。 《财富的理想国》中说&#xff0c;钱不是人生的全部&#xff0c;甚至不能保证你一定能过上幸福的生活&#xff0c;但一定的金钱&#xff0c;能为幸福生活打造坚实的基础。 2023全新的一年&#x…

10月阿里面试总结:必问的Spring面试解析,面试时要注意的那些坑

什么是Spring IOC 容器&#xff1f; 控制反转即IoC (Inversion of Control)&#xff0c;它把传统上由程序代码直接操控的对象的调用权交给容器&#xff0c;通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移&#xff0c;从程序代码本身转…

基于非局部滤波图像去噪方法

论文题目&#xff1a;A non-local algorithm for image denoising 1 摘要 我们提出了一种新的衡量噪声的方法&#xff0c;来评价和比较数字图像去噪方法的性能。我们首先计算和分析该方法的噪声类去噪算法&#xff0c;即局部平滑滤波器。其次&#xff0c;我们提出了一种新的算…

jar添加jre运行环境,即是电脑没有安装jdk也可以运行

目录 一、项目打包 二、生成jre文件 1、jdk8及一下版本 2、jdk9及其以上版本 三、添加jre运行环境 四、编写脚本 1、编写启动脚本start.bat 2、编写停止脚本stop.bat 注&#xff1a;查看jdk安装位置​ 一、项目打包 以idea工具&#xff0c;springboot项目为例&#xff0…

HikariCP实战 | 通过查看源码分析如何解决maxLifeTime配置问题

目录1、追本溯源2、解决hikariCP的maxLifetime配置出现以下warn问题3、具体解决步骤&#xff08;查看源码&#xff09;1、追本溯源 很多年前在stackoverflow上写过一篇文章&#xff1a; https://stackoverflow.com/questions/28180562/hikaricp-and-maxlifetime# hikariCP是非…

maven升级漏洞依赖jar包

最近在搞一些漏洞jar包升级&#xff0c;包括springboot、cloud等依赖&#xff0c;期间遇到了一些小坑&#xff0c;特此做这个记录一下。 目录1. 打印/获取该项目的依赖树2.判断依赖是否有漏洞3.版本兼容性查询4.常规依赖版本升级5.依赖升级5.1 jackson升级5.2 spring相关依赖、…

机器学习与深度学习的基本概念

目录 机器学习是什么&#xff1f; 机器学习的任务 回归Regression 分类Classification 创造学习Structed Learing 机器学习怎么找这个函数 定义含未知参数的函数 定义loss损失函数 定义优化器optimization 写出一个更复杂的有未知参数的函数 sigmoid 基本推理过程 si…

GitHub上架即下架!《分布式系统人人都是架构师》全彩笔记开源

小编又来给大家分享好书了&#xff1a;高翔龙老师的 《超大流量分布式系统架构解决方案&#xff1a;人人都是架构师2.0》&#xff0c;我在网上没找见开源的PDF版本所以分享一下&#xff01;小编会在文末附电子版免费下载方式。 高翔龙是谁&#xff1f; 云集基础架构负责人&am…

实战演练 | 使用 Navicat 在 MySQL 中存储图像

近年来&#xff0c;Web应用程序中的图像数量一直在稳定增长。还需要在不同尺寸的图像之间进行区分&#xff0c;例如缩略图&#xff0c;网络显示图像等。例如&#xff0c;我最近开发的一个应用程序显示新闻项目&#xff0c;其中每个项目都有缩略图和主要文章图像。另一个应用程序…

Tableau表格取消合并单元格

客户回访&#xff08;Client Review&#xff09; 文章目录前言一、原表格样式二、回访收集到的述求三、表格合并单元格方法&#xff08;一&#xff09;创建“序号”计算字段&#xff08;二&#xff09;将“序号”计算字段改为维度&#xff08;三&#xff09;将“序号”计算字段…