当前位置: 首页 > news >正文

数据库中的约束,聚合函数以及联合查询

目录

数据库中的约束

not null

unique

default

primary key

foreign key

表的设计

聚合函数(查询)

分组

联表查询(多表查询)

内连接

外连接

左外连接

右外连接

自连接

子查询

合并查询


数据库中的约束

为了保证我们存入数据库中的数据得靠谱,mysql就提供了一些机制,对数据进行检查。这个机制也就是约束。约束一旦被确定好后,后续在进行增删改的时候,就会判断要操作的是否符合约束从,符合就会执行操作,不符合则就报错。

我们需要在创建表的时候就对字段设置好约束。下面价绍一下各约束,check这个约束几乎不怎么使用,我这里就不介绍了。

not null

设置该列约束为非空,也就是该列的值必须有,不可以设置为null更改的话也不可以更为空

#使用的时候直接把not null 跟在字段后面,可以看下面例子:create table student(id int, name varchar(20) not null);

设置完以后,我们查看表结构发现name字段的null列变成no,也就是不允许为空

这时候我们进行插入更新操作时,如果name的值为null,就报错了

unique

这个关键字用来保证数据的唯一性,也是加在字段名后面。不允许指定列的不同行有相同的内容。

create table student(id int unique, name varchar(20));

为什么我们添加了unique约束后,就知道有没有重复的呢?带有unique的字段,在执行更新插入操作的时候会先自己进行一次查询,看表中对应字段是否存在与要插入的内容一致,如果不存在就插入(更改),存在就无法插入(更改),直接报错。

default

这个关键字是设置字段的默认值的,插入的时候我们可以指定字段插入,对于某些字段我们并没有插入值,服务器会给这样的字段设置的默认值为null,我们如果不想用他设置的默认值,我们可以自己设置默认值。这个也是直接跟在字段后面。

create table student(id int, name varchar(20) default '管理员');

primary key

这个关键字表示主键约束,主键也就是一条记录的身份标识。一个表中只可以有一个主键。这个主键的功能等同于非空和unique的结合体(也就是主键的功能是非空和防止重复)。

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

一般我们会将主键设置为整型,并且将整型的主键设置为自增形式,用户可以不用再传入主键的值。(自增只针对主键为整型的时候)

#直接在primary key后面加上auto_increment就行
create table student(id int primary key auto_increment, name varchar(20));

1.当主键设置为了自增的时候,对于这个字段,我们如果传入Null或者不传入值的时候,数据库会按照自增直接给我们分配一个数据。

2.我们也可以自己传入值,数据库会记录主键字段的已有内容的最大值,再次自动分配的时候从最大值后面开始。

foreign key

这个关键字是涉及外键的,涉及到两个表之间的约束,父表约束子表,子表被父表约束。

#先创建父类
create table classes(classId int primary key auto_increment, name varchar(20));#再创建子类create table student(id int primary key, name varchar(20), classId int, foreign key(classId) references classes(classId));

1.插入或删除子表中受约束的这一列中的数据时,要保证插入或删除的元素在父表中能查到。(这种有外键约束的也会触发查询操作,会去在父表中查询一下看存不存在这个元素)

2.删除/修改父表中的元素时,要去看在子表中有没有被使用,如果被使用了也不可以进行删除,修改。(也会触发查询操作,会去查父表要删除的元素在子表中有没有被使用,如果被使用,就不可以执行删除或者更改操作)。

3.primary key 和unique这两个自带索引,因为执行操作的时候可能会进场查询父表或者子表,很费时,所以,有索引就会大大提升速度。因此也就规定没有索引,就不可以建立这样的外键。

表的设计

数据库中的关系分为四种:一对一,一对多,多对多和没关系。

一对一:例如一个人只能有一个身份证号,一个身份证号也只能对应一个人。

一对多:一个人只可以在一个班级中,一个班级中却可以包括很多人。

多对多:一个人可以选修不同的课程,而一门课程可以被很多人选用。

聚合函数(查询)

sql中涉及到的聚合函数如下:(这个聚合函数是针对行和行之间的计算)

分组

通过group by来进行分组,通过指定列进行分组,值相同的放到一组。

1.select后面的字段要么在group by后面,要不就在聚合函数里面,否则无任何意义。

2.group by也可以结合条件进行查询操作。

3.group by可以结合条件的关键字不仅有where还有having。where条件用在分组前,在分组前,对结果集进行过滤,然后再进行分组。having用于分组完成后,对分组后的结果集进行过滤。

select name,avg(salary) from emp where name != '张三' group by name having avg(salary) > 5000;

联表查询(多表查询)

联表操作,我们必须要清楚笛卡尔积!笛卡尔积:将两个表的记录通过排列组合的方式结合起来构成一个更大的表。笛卡尔积后的列数就是原来两个表的列数之和,笛卡尔积后的行数就是原来两个表的行数之积。

内连接

我们通过笛卡尔积后可以得到一个很大的组合表,这里是两个表的所有组合,我们再根据两个表的连接关系,对表进行筛选。

#此时就是两个表进行了笛卡尔积
slect * from stu1,stu2;#我们要筛选出我们想要的内容,就得增加条件
#注意!!!在条件中会用到字段名,我们需要通过表名.字段名来进行调用
select * from stu1,stu2 where stu1.name = stu2.name and 其他条件;#上面是我们内连接的一种方式,我们还可以通过下面这种方式进行内连接。
select * from stu1 (inner) join stu2 on 条件; 

外连接

如果我们有两个表A,B,当B表中每一条记录都能在A表中找到对应的,A表中每一个记录也都能在B表中找到对应的,此时内外连接结果一样。否则如果不能一一对应,则内外连接就有区别了,外连接分为左连接和右连接。

左外连接

select 字段名  from 表名1 left join 表名2 on 连接条件;

左外连接:以左侧表为主,左侧表的每个记录都会在最后的临时结果集中,如果遇到了左表存在右表不存在的数据,就会把对应的列值置为空。

右外连接

select 字段 from 表名 1 right join 表名 2 on 连接条件 ;

右外连接:以右侧表为主,右侧表的每个记录都会存在在最后的结果集里面,如果遇到了右侧表中存在,左侧表中不存在的,会把对应列置为null。

自连接

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

我们查询的时候不可以,多个表的时候名字不可以相同,所以我们需要起别名。

select * from score as s1, score as s2 where 条件;

子查询

指嵌入到其他sql语句中的select语句,也可以称为嵌套查询。说白了就是将多条sql语句合成一个sql语句

#例:
select name from student where id = 1;#假设输出的为'张三'
select math,chinese from score where name = '张三';#下面这个就是嵌套查询(将上面两个合起来了)select math,chinese from score where name = (select name from student where id = 1);

合并查询

把多个select后的结果集合并成一个结果集。使用关键字union(会自动去掉结果集中重复行)或者union all(这个不会将结果集中重复行去掉)使用这个合并的前提是:每个 SELECT 语句必须具有相同数量的列,且对应列的数据类型必须相似

select ... from ... where 条件
union(all)
select ... from ... where 条件
SQL 查询中各个关键字的执行先后顺序: from > on> join > where > group by > with > having >
select > distinct > order by > limit

相关文章:

数据库中的约束,聚合函数以及联合查询

目录 数据库中的约束 not null unique default primary key foreign key 表的设计 聚合函数(查询) 分组 联表查询(多表查询) 内连接 外连接 左外连接 右外连接 自连接 子查询 合并查询 数据库中的约束 为了保证…...

【AI大模型】Ollama+OpenWebUI+llama3本地大模型

本地部署大模型 0.引言1.部署安装1.1部署工具1.2 概念介绍1.3 ollama安装后的基本使用1.4 大模型权重下载1.4.1 ollama在线下载1.4.2 huggingFace下载大模型权重及如何使用ollama进行调用 2.带有UI界面的使用3.参考 0.引言 (1)目的 本教程主要关于开源A…...

习题20240807

文章目录 题目 1: 泛型类题目 2: 泛型方法题目 3: 泛型接口题目 4: 泛型约束题目 5: 泛型集合题目6:题目7:题目8:题目9: 题目 1: 泛型类 编写一个泛型类 Box,它能够存储一个类型为 T 的值,并提供方法 SetI…...

src挖掘-记一次有趣的逻辑漏洞分享

漏洞挖掘-记一次有趣的逻辑漏洞挖掘 前言简述1、信息收集2、找功能点3、挖掘漏洞案例一:任意用户注册漏洞案例二-垂直越权导致管理员密码重置获得管理员后台权限漏洞总结 前言 此文章是小白的学习笔记,请不要利用文章内相关知识点进行非法渗透&#xff…...

【C++】STL | list (链表)详解及重要函数的实现

目录 前言 总代码 ListNode类框架的建立 (成员与模板) list类的框架 普通构造 与 empty_init(适合不同类型构造函数的小函数) list的迭代器 引子 operator、operator--(前置与后置) operator 与 operator! operator* 与 …...

警惕智能手机的“隐形眼”:如何保护我们的数字隐私堡垒

随着智能手机深入我们生活的方方面面,它变得无所不在,甚至无所不知。 但你是否意识到,你的手机可能正在悄无声息地“监听”你的一举一动? 从你的搜索习惯到日常对话,手机的个性化推荐系统正不断收集你的数据。 本文…...

人工智能算法工程师(高级)课程12-自然语言处理之NLP的语言模型-ELMo,transformer,BERT与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(高级)课程12-自然语言处理之NLP的语言模型-ELMo,transformer,BERT与代码详解。本课程面向高级人工智能算法工程师,深入讲解自然语言处理(NLP)中的关键语言模型技术,包括了EMLo和transformer架构。此外,课程还详细…...

PicGo + gitee 免费搭建个人图床

目录 1 图床概念2 使用gitee和PicGo搭建图床流程2.1 下载安装PicGo工具 3 图片上传错误处理3.1 PicGo客户端提示404错误信息图片上传失败3.2 PicGo客户端提示400错误信息图片上传失败 1 图床概念 ​ "图床"是一个网络术语,它指的是一种用于存储和托管图片…...

组合数的低复杂度运算

题源 题目 F. 预期中位数 每次测试的时间限制:3 秒 每次测试的内存限制:256 兆字节 Arul 有一个长度为 n 的二进制数组* a。 他将取该数组中所有长度为 k(k 为奇数)的子序列并找到它们的中位数。 所有这些值的总和是多少&#xf…...

小型并网式光伏气象站:光伏电站的智能守护者

小型并网式光伏气象站以其独特的功能和优势,成为了电站高效运行的智能守护者。小型并网式光伏气象站通过精准的数据采集与分析,为光伏电站的运维管理提供了强有力的支持。 小型并网式光伏气象站能够实时监测并记录光伏电站周围环境的多种气象参数&#x…...

JavaScript 中的回调函数(callback)

JavaScript 中的回调函数(callback) JavaScript 中的回调函数(callback)是一个传递给另一个函数作为参数的函数,并且这个传递的函数可以在其他函数内部被调用执行。回调函数是异步编程的一个核心概念,特别…...

计算机毕业设计hadoop+spark+hive漫画推荐系统 动漫视频推荐系统 漫画分析可视化大屏 漫画爬虫 漫画推荐系统 漫画爬虫 知识图谱 大数据

HadoopSparkHive漫画推荐系统详细开题报告 一、引言 随着互联网技术的飞速发展,动漫和漫画产业的数据量急剧增长。用户面临着海量漫画作品的选择难题,如何从这些数据中高效地提取有价值的信息,为用户推荐符合其喜好的漫画作品,成…...

解决pycharm日志总是弹出“无法运行Git,未安装Git”的问题

需求分析 我电脑中安装了git,但是打开pycharm,右下角总是弹出 无法运行Git,未安装Git的日志。 解决方法 首先打开pycharm,按照以下路径,依次点击。 file -----settings-----version control -----Git----Git path(选择自己下载…...

threejs 节点材质系统 绑定attribute

新的 节点材质系统 绑定属性及使用 非常方便 不必重复声明 以instances为例 import {instancedBufferAttribute,instancedDynamicBufferAttribute,} from "three/tsl";声明一个 InstancedBufferAttribute 使用 instancedBufferAttribute包装后就可以在shader中直接使…...

Rabbitmq的几种工作模式

工具类 public class RabbitMQConnection {public static Connection getConnection() throws Exception{//1.创建connectionFactoryConnectionFactory connectionFactory new ConnectionFactory();//2.配置HostconnectionFactory.setHost("127.0.0.1");//3.设置Po…...

如何在 Debian 上安装运行极狐GitLab Runner?【二】

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…...

简单的docker学习 第13章 CI/CD与Jenkins(下)

第13章 CI/CD 与 Jenkins 13.13 自由风格的 CI 操作(最终架构) 前面的架构存在的问题是,若有多个目标服务器都需要使用该镜像,那么每个目标服务器都需要在本地构建镜像,形成系统资源浪费。若能够在 Jenkins 中将镜像相撞构建好并推送到 Har…...

基于STM32设计的智能鱼缸_带鱼儿数量视觉识别(华为云IOT)(202)

文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置【3】自动换水原理1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择【1】设备端开发【2】上位…...

立体连接模式下的传播与沟通:AI智能名片小程序的创新应用与深度剖析

摘要:在数字化浪潮的推动下,信息传播与沟通方式正经历着前所未有的变革。立体连接模式,作为这一变革的重要产物,通过整合物理空间、虚拟网络空间与社群心理空间的三维联动,实现了信息的深度传播与高效互动。AI智能名片…...

基于Python的Scrapy爬虫的个性化书籍推荐系统【Django框架、超详细系统设计原型】

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目介绍系统分析系统设计展示总结 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 项目介绍 近年来,随着互联网的蓬勃发展,企事业单…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

ES6从入门到精通:前言

ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...