MySQL约束和查询

news2024/10/7 18:23:55

约束和查询

  • 1. 约束
    • 1.1 约束类型
    • 1.2 常用的约束
  • 2. 查询
    • 2.1 聚合查询
      • 2.1.1 聚合函数
      • 2.1.2 GROUP BY
      • 2.1.3 HAVING
    • 2.2 联合查询
      • 2.2.1 内连接
      • 2.2.2 外连接
    • 2.3 合并查询

1. 约束

1.1 约束类型

  1. NOT NULL - 指示某列不能存储 NULL 值。
  2. UNIQUE - 保证某列的每行必须有唯一的值。
  3. DEFAULT - 规定没有给列赋值时的默认值。
  4. PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标
    识,有助于更容易更快速地找到表中的一个特定的记录。
  5. FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  6. CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略
    CHECK子句

1.2 常用的约束

  1. primary key 主键 通常用来约束一些具有标识性的列, 方便快速查找 例如: 身份证号, 学号…
    被约束的列不可以为空并且不能重复 通常和 auto_increment 搭配使用,这样插入的时候就可以不用管这一列直接插入 null 就可以自动分配.
    在这里插入图片描述
    我们也可以插入指定的classId
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/b03b303496de43cca05cc102ca887455.png

插入指定数据之后下次在插入null就会在上次插入的基础上加一
2. foreign key 外键 外键是多个表之间互相约束的一种方式 通过外键约束可以检查一些不合理的数据
语法:

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

在这里插入图片描述

如果我们插入的数据在主表的那一列不存在的话就会报错
在这里插入图片描述
反之如果数据在主表的那一列存在就可以插入成功
在这里插入图片描述
因为主表对子表存在约束, 所以子表还存在的时候删除主表就会报错
在这里插入图片描述
所以我们在删除主表时要先删除子表
在这里插入图片描述

2. 查询

2.1 聚合查询

2.1.1 聚合函数

常见的统计总数、计算平局值等操作,可以使用聚合函数来实现,常见的聚合函数有:

函数说明
COUNT([DISTINCT] expr)返回查询到的数据的 数量
SUM([DISTINCT] expr)返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr)返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的 最小值,不是数字没有意义

这都是一些简单的函数通过名字就可以知道用途在其他语言中都已经学过这里就不在一一讲解.

2.1.2 GROUP BY

SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:使用 GROUP BY 进行分组查询时,SELECT 指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT 中则必须包含在聚合函数中.
例如:

select column1, sum(column2), .. from table group by column1,column3;

我们可以通过一个简单的例子来理解一下
创建一个员工表查询每个角色的最高, 最低和平均工资
在这里插入图片描述

2.1.3 HAVING

GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用HAVING
通俗一点说就是 WHERE 用在 GROUP BY 之前 HAVING 用在 WHERE 之后, 他们两个也可以同时使用
我们可以在上一个例子中查询平均工资低于1500的角色和它的平均工资
在这里插入图片描述
当我们要查询平均工资低于1500的角色和它的平均工资并且 role 不是服务员的时候就可以使用 WHERE
在这里插入图片描述

2.2 联合查询

实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:查询出来的数据会非常多, 并且有很多无效数据所以需要通过一下条件对查询结果进行筛选.

2.2.1 内连接

语法:

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

这样就可以将来自不同表的数据结合到一块

2.2.2 外连接

内连接只能查询两个表对应的字段, 如果我们想要查询两个表特有的数据就可以使用外连接
外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接。
语法:

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

2.3 合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。使用UNION和UNION ALL时,前后查询的结果集中,字段需要一致.
union: 该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行
案例:查询id小于3,或者名字为“英文”的课程:

select * from course where id<3
union
select * from course where name='英文';
-- 或者使用or来实现
select * from course where id<3 or name='英文';

union all: 该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行
案例:查询id小于3,或者名字为“Java”的课程

select * from course where id<3
union all
select * from course where name='英文';

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

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

相关文章

TCP四次挥手过程

TCP 断开连接是通过四次挥手方式。 双方都可以主动断开连接&#xff0c;断开连接后主机中的「资源」将被释放&#xff0c; 刚开始双方都处于 establised 状态&#xff0c;假如是客户端先发起关闭请求&#xff0c;过程如下图&#xff1a; 第一次挥手&#xff1a;客户端打算关闭…

C++模拟实现位图和布隆过滤器(哈希)

目录 前言引入&#xff1a; 一、位图 1.1 位图概念 1.2 位图的实现 1.3 位图的应用 二、布隆过滤器 2.1 哈希的弊端 2.2 布隆过滤器概念 2.3 布隆过滤器的插入 2.4 布隆过滤器的查找 2.5 布隆过滤器的删除 2.6 布隆过滤器的模拟实现 2.7 布隆过滤器优缺点 三、…

CSS ::file-selector-button伪元素修改input上传文件按钮的样式

默认样式 修改后的样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdev…

HTTP 请求走私漏洞(HTTP Request Smuggling)

一、什么是Http 请求走私漏洞&#xff1f; HTTP请求走私漏洞&#xff08;HTTP Request Smuggling&#xff09;是一种安全漏洞&#xff0c;利用了HTTP协议中请求和响应的解析和处理方式的不一致性。攻击者通过构造特定的恶意请求&#xff0c;以欺骗服务器和代理服务器&#xff0…

微信小程序-地图上的图标计算旋转值朝向经纬度计算

废话不多说&#xff0c;开整 // 参数为寄件人经纬度和收件人经纬度 // 根据寄收件人经纬度弧度π进行rotate旋转计算 const getRotate (po1, po2) > {if (!(po1 && po2)) return 0const lng_a po1.longitudeconst lat_a po1.latitudeconst lng_b po2.longitud…

pg谓词下推分析(一)

谓词下推分析&#xff08;一&#xff09; 本文基于pg13.8。 谓词下推阶段即是把约束条件下推对条件涉及的表上&#xff08;RelOptlnfo&#xff09;&#xff0c;其中同时会涉及到等价类的推导&#xff0c;及建立逻辑连接关系&#xff08;外连接的SpecialJoinInfo结构的创建与设…

apple pencil二代平替笔哪个好用?苹果平板平替笔排行

光是一款Apple Pencil&#xff0c;就卖到了接近一千多块&#xff0c;信息对于很多人来说都觉得太贵了。事实上&#xff0c;由于平替电容笔的性价比也非常高&#xff0c;因此它还是值得一试的。不管是学习&#xff0c;写作&#xff0c;还是绘画&#xff0c;这支平替电容笔&#…

力扣 135. 分发糖果

题目来源&#xff1a;https://leetcode.cn/problems/candy/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a; 先从左往右比较&#xff0c;右边孩子评分比左边高就多发1颗糖&#xff0c;否则就只发1颗&#xff1b;再从右往左比较&#xff0c;左边孩子评分…

Element ui table展开行中,某些行需要展开,某些行不需要展开

1.templatetemplate里面对应的代码&#xff1a; <el-table :data"menuList" style"width: 100%" :row-class-name"isShowIcon"><el-table-column type"expand"><template slot-scope"props" v-if"prop…

阿里云GPU服务器使用教程_创建_连接_GPU驱动_实践教程

阿里云GPU服务器怎么使用&#xff1f;先创建GPU实例、GPU云服务器远程连接&#xff0c;为GPU云服务器安装GPU驱动、安装GRID驱动等&#xff0c;使用GPU服务器部署NGC环境、GPU AI模型训练教程、在GPU实例上使用RAPIDS加速机器学习任务、RAPIDS加速机器学习等使用教程&#xff0…

AI代码生成能力进一步提高,网友:程序员饭碗保不住了?

文章内容来源于公众号——布博士&#xff08;擎创科技资深产品专家&#xff09; 自chatGPT出现以来&#xff0c;人工智能&#xff08;AI&#xff09;迅速发展成为科技行业的重要领域。人工智能已应用于医疗、金融、交通、农业等各个领域。人工智能代码生成的进步提高了软件开发…

Ingress:集群进出流量的总管

Service 很有用&#xff0c;但也只能说是“基础设施”&#xff0c;它对网络流量的管理方案还是太简单&#xff0c;离复杂的现代应用架构需求还有很大的差距&#xff0c;所以 Kubernetes 就在 Service 之上又提出了一个新的概念&#xff1a;Ingress。 Service 还有一个缺点&…

el-dialog 添加loading;avue-form 表单插槽

效果: 第一步&#xff1a;custom-class"publishDialog" 新起一个类名 <el-dialog title"发布配置" custom-class"publishDialog" :visible.sync"publishDialogVisible" width"800px" :append-to-body"true":b…

【电路效应】信号处理和通信系统模型中的模拟电路效应研究(SimulinkMatlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码、Simulink仿真实现 &#x1f4a5;1 概述 在信号处理和通信系统模型中&#xff0c;模拟电路效应研究是指考虑到实际电路的特性对信号进行建模和分析的过程。模拟电路效应…

C++中main()函数和命令行参数介绍

C中main()函数和命令行参数介绍 在C中&#xff0c;main()函数是程序的入口点&#xff0c;它是一个特殊的函数&#xff0c;在程序开始执行时被首先调用&#xff0c;也是程序结束时的最后一个被执行的函数。main() 函数的类型始终为 int&#xff0c;根据C标准&#xff0c;main() …

Petalinux 无法识别PHY ADDR 显示地址为FF 或者-1

BD文件使能了GEM 但是系统启动以后ifconfig发现没有ETH0 解决办法有两种 1&#xff0c;在DTS settings下设置对应的板卡 2.直接修改设备树&#xff0c;第二种方法对没有linux基础的朋友不是那么友好

地面点云提取:Autoware预处理ray_ground_filter节点解析 + 解决ray_ground_filter无输出的问题

文章目录 一、解决Autoware的ray_ground_filter节点无点云输出的问题二、ray_ground_filter节点代码分析2.1.监听bask_link和velodyne之间的TF2.2 裁切过高点云2.3 消除雷达近身反射点的影响2.4 角度和距离微分&#xff08;转换到柱坐标&#xff09;2.5 地面判断(核心部分) 一、…

TextView 必填项pro版

优点 基本解决对齐方式,可以设置前缀隐藏和显示 /*** https://blog.csdn.net/u013982652/article/details/94404711* Android自定义TextView实现必填项前面的*号* 另一种实现方式(推荐使用这种,有非必填情况的话不会有对齐问题)* <p>* <cn.mvp.mlibs.weight.MiRequire…

2023年网络安全面试题:详细答案解析与最佳实践分享

如果在数据来源和网络分享方面存在侵权问题&#xff0c;请立即联系我以删除相关内容。 一句话木马 【基本原理】 利用文件上传漏洞&#xff0c;往目标网站中上传一句话木马&#xff0c;然后可以通过中国菜刀chopper.exe来获取和控制整个网站目录。表示后面即使执行错误&…

ZooKeeper原理剖析

1.ZooKeeper简介 ZooKeeper是一个分布式、高可用性的协调服务。在大数据产品中主要提供两个功能&#xff1a; 帮助系统避免单点故障&#xff0c;建立可靠的应用程序。提供分布式协作服务和维护配置信息。 2.ZooKeeper结构 ZooKeeper集群中的节点分为三种角色&#xff1a;Le…