数据库的进阶操作

目录

1、数据库的约束

2、查询操作的进阶

2.1 查询插入

2.2 聚合查询

2.3 运算查询

2.3 分组查询

2.4 联合查询

2.5 内外连接

2.6 子查询

2.7 合并查询


1、数据库的约束

  数据库的约束是指:数据库会自动的对数据的合法性进行校验和检查的一系列操作的机制,目的就是为了保证数据库避免被插入或修改了一些非法的数据。

MySQL中提供了以下约束:

数据库的约束
not null指某列不能存储null值
unique保证某列的每行必须有唯一的值
default规定没有给列赋值的默认值
primary keynot null和unique的结合,确保某列或多列的结合有唯一标识
foreign key保证一个表中的数据匹配另一个表中值的参照完整性
check保证列中的值符合指定的条件

例如:


primary key 一行记录的身份标识

一张表中只能有一个primary key,一个表中的记录,只能有一个作为身份标识的数据。

使用自增主键,数据库会自动分配一个主键,会从1开始,依次递增的分配主键的值。如果指定插入,默认值会从最大的值开始继续分配。

create table student (id int primary key auto_increment,name varchar(20));


foreign key 外键 描述两个表之间的关联关系

现在有两个表,其中class表对student表进行了约束

创建约束的过程:

create table 表名( 列,列 foreign key(要约束的列)references 来自的表(来自的列));

注意事项:
1、约束别人的表称为“父表”,被约束的表称为“子表”。

2、使用外键约束的时候,要求父表中被关联的这一列,要是主键或者被unique修饰。

2、查询操作的进阶

2.1 查询插入

查询可以搭配插入使用,把查询得到的结果,作为插入的数据。

insert into 表1 select * from 表2;

注意:查询出来的结果集,列的数量和类型要和插入的表相匹配。


2.2 聚合查询

表达式查询:针对列和列之间进行运算的

聚合查询:相当于针对行和行之间运算的

1、查询当前行数

select count(要查询的列)from 表名;

注意:

1、要是查询整个表的行数,null会被算进去,如果是查询具体的一列的行数,null不会被算进去。

2、在查询单独列的行数时,还可以对此列的行进行去重操作,在要查询的列前加上distinct


2.3 运算查询

可以对这一列的若干行进行算术计算,只能对数字类型进行使用,null不会参与运算。

主要运算方式:

SUM()求和
AVG()求平均值
MAX()求最大值
MIN()求最小值

例如:


2.3 分组查询

可以使用group by进行分组,再针对分组进行聚合查询

分组规则:针对指定的列进行分组,把这一列中值相同的行,分成一个组。

分组语句:select 列名 from 表名 group by 要分组的列名;

若分组后一个组中有多个数据,会随机输出一个数据作为代表。

分组加聚合语句:select 列名,聚合运算 from 表名 group by 要分组的列名;

例如:


在使用group by进行分组的时候,还可以使用where来搭配条件。

1、分组前条件:where在group前

select 列名,聚合运算 from 表名 where条件 group by 要分组的列名;

2、分组后条件:使用having来描述条件,having在group by后

select 列名,聚合运算 from 表名 group by 要分组的列名 having 条件;

3、使用where和having还可以同时满足前后都有条件的情况


2.4 联合查询

联合查询又称为多表查询,当我们要查询的结果是多个表配合使用才能得到,就可以使用聚合查询,使用SQL语句将多个表进行笛卡尔积,把有效的结果进行筛选出来。

笛卡尔积本质是通过排列组合的方式,得到一个更大的表,这个表的列数是多个表的列数相加,行数是多个表的行数相乘。

例如:有两个表,一个是学生表,一个是成绩表,要计算某个学生的成绩的时候,就可以通过笛卡尔积,把这两个表组合起来,筛选出要得到的结果。

1、先进行笛卡尔积

2、加上连接条件,筛选有效数据。

3、进一步筛选,得到某个同学的成绩,以zhangsan为例。

4、针对要查询的列进行精简


如果是三个表配合才能得到结果,就需要对这三个表进行笛卡尔积,然后需要两个连接条件,来连接这三个表。

2.5 内外连接

内连接:当我们将多个表进行联合查询的时候,通过条件进行连接筛选,只有匹配成功的数据才能作为结果输出。

内连接语句:select * from student inner join score on student.id=score.id;


外连接:外连接分为左外连接和右外连接,左外连接以左侧表为基准,左侧表中的数据没有找到匹配的数据时,以NULL作为代替,右外连接以右侧表为基准,右侧表中的数据没有找到匹配的数据时,以NULL作为代替。

左外连接:

左外连接语句:select * from student left join score on student.id=score.id;


右外连接:

右外连接语句:select * from student right join score on student.id=score.id;


2.6 子查询

子查询:把多个简单的SQL语句拼成一个复杂的SQL语句

单行子查询:查询出的一行记录的结果,作为另一个查询语句的条件进行再次查询。

语句:select 列名 from 表名 where 列名=(select的查询结果);

多行子查询:查询出的多行记录的结果,作为一个范围类型,让另一个查询语句进行判断。

语句:select 列名 from 表名 where 列名 in(select查询的范围结果);

in 表示在这个范围内


2.7 合并查询

使用union关键字可以将多个SQL查询的结果合并到一起

注意:

1、查询出结果的列名以查询第一个表的列名为准

2、两条语句合并查询时,会进行去重操作,若不进行去重,使用union all关键字。


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

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

相关文章

.Net HttpClient 使用请求数据

HttpClient 使用请求数据 0、初始化及全局设置 //初始化:必须先执行一次 #!import ./ini.ipynb1、使用url 传参 参数放在Url里,形如:http://www.baidu.com?namezhangsan&age18, GET、Head请求用的比较多。优点是简单、方便&#xff0…

Qt还有希望吗

🚀2025 年 Qt 框架价值大揭秘!会持续闪耀吗? 宝子们,今天来聊聊 Qt 框架在 2025 年的价值走向,这可是跨平台应用开发的宝藏工具呀! 🌟核心优势稳稳拿捏Qt 的跨平台能力绝了! Windows…

Redis设计与实现——数据结构与对象

简单动态字符串(SDS) SDS 的结构定义 len:记录当前字符串的实际长度(不包含 \0),获取长度的时间复杂度为 O(1)。free:记录未使用的空间大小,用于优化内存分配。buf[]:实…

NeurIPS 2025 截稿攻略

会议资讯 NeurIPS,全称神经信息处理系统大会,是一个关于机器学习和计算神经科学的国际会议。NeurIPS是CCF(计算机学会)推荐的A类会议!是机器学习领域内最具难度、水平最高且影响力最强的会议之一。它与ICML&#xff0…

Java中堆栈

文章目录 Java中堆栈1. 栈(Stack)特点示例 2. 堆(Heap)特点示例 3. 核心区别4. 常见问题5. 内存可视化示例内存布局示意图: 总结 Java中堆栈 在 Java 中,“堆栈” 通常指的是堆(Heap&#xff0…

【类拷贝文件的运用】

常用示例 当我们面临将文本文件分成最大大小块的时,我们可能会尝试编写如下代码: public class TestSplit {private static final long maxFileSizeBytes 10 * 1024 * 1024; // 默认10MBpublic void split(Path inputFile, Path outputDir) throws IOException {…

打破产品思维--被讨厌的勇气--实战5

课程:B站大学 记录产品经理实战项目系统性学习,从产品思维,用户画像,用户体验,增长数据驱动等不同方向理解产品,从0到1去理解产品从需求到落地的全过程,测试左移方向(靠近需求、设计…

【Autosar SecOC 1.信息安全原理介绍】

这里写目录标题 1 背景2 了解黑客攻击原理3 SecOC实现数据的真实性与完整性校验3.1 数据身份验证完成真实性验证3.2 防止重放攻击 1 背景 在今天的车载网络中,大部分数据传输是在没有任何特殊安全措施的情况下进行的。因此,一旦能够直接访问车辆的总线&a…

基于SpringBoot的校园周边美食探索及分享平台【附源码+数据库+文档下载】

一、项目简介 本项目是一个基于 SpringBoot Vue 的校园周边美食探索与分享平台,专为在校大学生开发,集美食推荐、好友互动、收藏分享于一体。 通过平台,用户可以探索学校周边的美食店铺、发布美食鉴赏、添加好友进行交流分享。同时&#x…

无偿帮写毕业论文

以下教程教你如何利用相关网站和AI免费帮你写一个毕业论文。毕竟毕业论文只要过就行,脱产学习这么多年,终于熬出头了,完成毕设后有空就去多看看亲人好友,祝好! 一、找一个论文模板(最好是overleaf) 废话不多说&#…

15 个 Azure DevOps 场景化面试问题及解答

问题 1. 解释 Azure DevOps YAML 管道的典型结构。 您可以从管道的整体结构开始,从触发器开始。您也可以选择解释它可能包含的不同类型的阶段:构建、测试、扫描、部署等。 Azure DevOps YAML 管道结构示例 触发器指示管道运行。它可以是持续集成 (CI) 或…

Java 大视界 -- Java 大数据机器学习模型在元宇宙虚拟场景智能交互中的关键技术(239)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

本地不安装oracle,还想连oracle

1.首先要用navicat,或者toad打开连接数据库 2.安装oracle客户端,有时候OCI.dll需要看数据库版本,我们Oracle数据库是12C,可以用这个版本 3. 4.配置环境变量 变量名:NLS_LANG变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK …

LabVIEW车牌自动识别系统

在智能交通快速发展的时代,车牌自动识别系统成为提升交通管理效率的关键技术。本案例详细介绍了基于 LabVIEW 平台,搭配大恒品牌相机构建的车牌自动识别系统,该系统在多个场景中发挥着重要作用,为交通管理提供了高效、精准的解决方…

deque底层数据结构以及和queue的异同

文章目录 底层数据结构原理关键组成部分操作效率与其他容器的对比适用场景C STL中的实现细节总结 deque和queue的异同相同点不同点 deque(双端队列)是一种具有高效两端插入和删除操作的数据结构,常见于C标准库(STL)和其…

WordPress 网站上的 jpg、png 和 WebP 图片插件

核心功能 1. 转换 AVIF 并压缩 AVIF 将您 WordPress 网站上的 jpg、png 和 WebP 图片转换为 AVIF 格式,并根据您设置的压缩级别压缩 AVIF 图片。如果原始图片已经是 WordPress 6.5 以上支持的 AVIF 格式,则原始 AVIF 图片将仅被压缩。 2. 转换 WebP 并…

Docker Volumes

Docker Volumes 是 Docker 提供的一种机制,用于持久化存储容器数据。与容器的生命周期不同,Volumes 可以独立存在,即使容器被删除,数据仍然保留。以下是关于 Docker Volumes 的详细说明: 1. 为什么需要 Volumes&#…

西电 | 2025年拟录取研究生个人档案录取通知书邮寄通知

各位考生: 我校2025年硕士研究生录取工作已结束,根据相关工作管理规定,现将个人档案转调及录取通知书邮寄信息确认等有关事宜通知如下: 一、个人档案转调 (邮寄档案请务必使用EMS) 1.全日制考生 录取类…

ExcelJS库的使用

ExcelJS 安装 npm install exceljs新的功能! Merged fix: styles rendering in case when “numFmt” is present in conditional formatting rules (resolves #1814) #1815. Many thanks to andreykrupskii for this contribution!Merged inlineStr cell type support #15…

时空注意力机制深度解析:理论、技术与应用全景

时空注意力机制作为深度学习领域的关键技术,通过捕捉数据在时间和空间维度上的依赖关系,显著提升了时序数据处理和时空建模能力。本文从理论起源、数学建模、网络架构、工程实现到行业应用,系统拆解时空注意力机制的核心原理,涵盖…