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

news/2024/11/7 20:59:29/

文章目录

  • 一. 数据库约束
    • 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 进行分组

SELECTstu.sn,stu.NAME,stu.qq_main,sum( sco.score ) 
FROMstudent stuJOIN score sco ON stu.id = sco.student_id
GROUP BYsco.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.ppmy.cn/news/2123.html

相关文章

Python读写文件操作

一、文件编码 1.1 什么是编码&#xff1f; 不变吗就是一种规则集合&#xff0c;记录了内容和二进制相互转换的逻辑&#xff0c;常用的有UTF-5、GBK等编码 1.2 为什么需要编码&#xff1f; 计算机只认识二进制的0和1&#xff0c;所以需要将内容翻译成二进制才能保存在计算机…

免费搜题系统搭建

免费搜题系统搭建 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xff09; …

刷爆力扣之1 比特与 2 比特字符

刷爆力扣之1 比特与 2 比特字符 HELLO&#xff0c;各位看官大大好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 今天阿呆继续记录下力扣刷题过程&#xff0c;收录在专栏算法中 &#x1f61c;&#x1f61c;&#x1f61c; 该专栏按照不同类别标签进行刷题&am…

JAVA毕业设计科普网站计算机源码+lw文档+系统+调试部署+数据库

JAVA毕业设计科普网站计算机源码lw文档系统调试部署数据库 JAVA毕业设计科普网站计算机源码lw文档系统调试部署数据库本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;idea eclipse 前端技术&#xff1a;Layui、H…

备忘录模式(Memento)

参考&#xff1a; [备忘录设计模式 (refactoringguru.cn)](https://refactoringguru.cn/design-patterns/mediator) 文章目录一、什么是备忘录模式&#xff1f;二、实现三、优缺点优点缺点四、适用环境一、什么是备忘录模式&#xff1f; 在软件构建过程中&#xff0c;某些对象…

【JavaWeb】第七章 Tomcat

文章目录1、JavaWeb2、Web资源与Web服务器3、Tomcat的使用4、部署Web工程到Tomcat中5、工程和资源的访问6、IDEA集成Tomcat服务器7、创建动态web工程8、在IDEA中启动部署web模块1、JavaWeb JavaWeb是指通过Java语言编写的可以通过浏览器访问的程序的总称。 请求&#xff1a; 客…

Python.03.函数使用

目录 函数与方法的区别 函数的定义 传参的情况 常见传参 其他传参 函数的返回值 函数嵌套 Lambda表达式 字典排序 map函数 filter函数 函数与方法的区别 直接调用的是函数 &#xff0c;通过对象点出来的是方法 print("hello") a [2, 1, 3] a.sort() pri…

C++ lambda表达式详解

一、lambda表达式基本用法 1、语法 Lambda 表达式的基本语法如下&#xff1a; 捕获列表 mutable(可选) 异常属性 -> 返回类型 { // 函数体 } 2、lambda值捕获 /*** brief lamdba值捕获*/ void test() {int nvalue 1;auto func_copyvalue [nvalue]{return nvalue;};nva…