Mysql语法三:表的约束和表与表之间的关系以及高级查询

news2024/9/17 9:16:14

目录

1.表的约束

1.1:约束类型

1.2:NULL约束

1.3:UNIQUE:唯一约束

1.4:DEFAULT :默认值约束

1.5:PRIMARY KEY:主键约束

1.5.1:联合主键

 1.5.2:自增主键

1.6:FOREGIN KEY:外键约束

2.表的设计

2.1:三大关系

 2.2:设计表的步骤

3.高级查询

3.1:聚合查询

3.1.1:聚合函数

 3.1.2:GROUP BY 子句

3.1.3:HAVING

3.2:联合查询 

3.2.1:内连接

3.2.2:外连接

 3.2.3:自连接

3.2.4:子查询


前言:前一篇我们讲了简单的单表操作,如新增(C),查询(R),修改(U), 删除(D)。这里的查询只是简单的,单表的查询。接下来,我们要学习给列加上约束,多表的查询。

1.表的约束

为何要有约束?
就是让数据库帮助程序猿更好的检查数据是否正确。

1.1:约束类型

1. NOT NULL:指示莫列不能为空。不能保存NULL。

2.UNIQUE:保证莫列的值必须有唯一的值,不能重复。

3.DEFAULT:规定没有给赋值的列,赋值给默认值。

4.PRIMARY KEY:是NOT NULL和UNIQUE的结合,确保莫列(或者莫两个列多个列的结合)有唯一的标识,有助于更容易更快速地找到表中一个特定地记录。

5.FOREGIN KEY: 保证一个表中地数据匹配另一个表中的值的参照完整性。

1.2:NULL约束

创建表时:可以指定莫列不为空

当你指定莫列不为空的时候,你再插入NULL值,会报错。 


1.3:UNIQUE:唯一约束

指定莫列为唯一的,不能重复的


1.4:DEFAULT :默认值约束

指定列插入数据时。该列为空.会自动填入默认值


1.5:PRIMARY KEY:主键约束

                        ------是 NOT NULL 和 UNIQUE 的结合

在一个表里,只能有一个主键。 


1.5.1:联合主键

但允许把多个列放在一起同时作为一个主键。这样叫做联合主键。

  这也说明,是先查询之前插入的数据,满足再进行插入


 1.5.2:自增主键

那我如果手动新增一条记录

insert into student values(23,'qiqi',21),那下条自增主键是24?还是4? 


1.6:FOREGIN KEY:外键约束

外键用于关联其他表的主键或唯一键

                                    ---------foregin key(当前表的列名) reference 主表(列名)

起到约束作用的表叫做主表/父表

被约束的这个表叫做子表。

 要想创建外键,就要求主表对应的列得有 UNIQUE 约束,PRIMARY KEY。

一个表里面可以建多个外键。

那如果我想删除主表,直接用 drop table class 可以吗?

 看来是不行的。要先删除子表,再删除父表。 


2.表的设计

2.1:三大关系

一对一:

一对多:

 多对多:

 2.2:设计表的步骤

1.先确定实体(学生,课表等)

2.再明确实体之间的关系。

3.根据上述内容,套入关系中,表就出来了。


3.高级查询

3.1:聚合查询

聚合函数用于对一组值进行计算并返回一个汇总值。

3.1.1:聚合函数

函数说明
COUNT ([DISTINCT] expr)返回查询到的数据的数量(空行也会算上)
SUM ([DISTINCT] expr)

返回查询到数据的总和,不是数字没有意义。

AVG ([DISTINCT] expr)返回查询到数据的平均值,不是数字没有意义。
MAX ([DISTINCT] expr)返回查询到数据的最大值,不是数字没有意义。
MIN ([DISTINCT] expr)返回查询到数据的最小值,不是数字没有意义。





这是行之间的计算


 3.1.2:GROUP BY 子句

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

 分组前的条件过滤


3.1.3:HAVING

分组之前进行条件查询。我们用的是where ,那分组之后再想进行条件过滤就要用having。

select  列名  聚合函数 from 表名 group by 分组列名 having 指定条件


3.2:联合查询 

联合查询也叫做多表查询。

首先要明白什么叫笛卡尔积:

笛卡尔积是两个表的乘积,列数是两个表的列数之和,行数是两个表的行数之积。

select * from 表名1,表名2;


3.2.1:内连接

 是这两个表都会有的数据,通过内连接,筛选出有效的数据。

这里是用where 进行内连接

select  指定列名 from 表名1,表名2 .... where 内连接条件

如果几个表名的列名相同,要写 成表名.列名

 还可以用  inner join on

select 指定列 from 表名1 (inner) join  表名2  on 指定条件


那where 和join on 有啥区别了?

where:

是先进行笛卡尔积,再执行下一步where挑选出表中的符合内连接的数据,这样比较慢。

join on:

先显示from 后面的这张表,再从 join 后的这张表挑选出返回条件可连接的元素,之后才连接起来,比较快。

where和join on 之间的差距在于效率的高低,而查询结构并没有什么差别.

where 的查询效率低于join on的查询效率。


3.2.2:外连接

外连接分为左外连接和右外连接。

左外连接:会把左表的所有连接的结果列出来,若右表中没有对应的记录,就是用null填充。

select * from  左表 left join 右表 on 连接条件;

右外连接:会把右表的所有连接的结果列出来,若左表中没有对应的记录,就是用null填充。

select * from  右表 left join 左表 on 连接条件;


 3.2.3:自连接

自己和自己笛卡尔积,将自己的行传化为列


3.2.4:子查询

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

单行子查询:返回一行记录的子查询。

=:

查询李四的成绩


多行子查询:返回多行记录的子查询

IN:

查询英语成绩不及格的同学


联合查询的步骤:

1.先计算笛卡尔积

2.引入连接条件

3.根据需求加入必要条件,将不必要的列去掉。

总结:

以上就是我总结的表的约束的高级查找的知识,若有错误,请各位铁子留言纠错,若感觉不错,请一键三联。

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

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

相关文章

HOOPS 3DGS技术概述

1.什么是HOOPS 3D图像系统 HOOPS 3D图形系统(HOOPS/3DGS)是一款高性能3D图形工具包,适用于开发人员构建Windows和UNIX操作系统以及Internet应用程序。HOOPS/3DGS高度优化的数据结构和算法大大简化了基于CAD/CAM/CAE、科学可视化和地理信息系…

Flutter的三棵树

一、Flutter常见的家族成员 Widget常见的家族成员 Element常见的家族成员 Render常见的家族成员 二、示例代码对应的Flutter Inspector树 示例代码:MyApp->MyHomePage->ErrorWidget,包含了StatelessWidget、StatefulWidget、LeafRenderObjectWid…

远程医疗解决方案-最新全套文件

远程医疗解决方案-最新全套文件一、建设背景二、建设思路三、建设方案四、获取 - 远程医疗全套最新解决方案合集一、建设背景 针对当今社会医疗资源分布不均、看病难看病贵、医学单位间学术交流和研讨开展困难,华为公司推出了远程医疗解决方案,实现远程…

springboot(13):spring 过滤器和拦截器的区别

目录过滤器和拦截器的区别过滤器的使用1.使用spring boot提供的FilterRegistrationBean2.使用原生servlet注解定义Filter拦截器的使用在前面我们讲过拦截器怎么使用,参考:拦截器 和拦截器有个差不多的叫过滤器。 过滤器和拦截器的区别 首先看一下下面…

1535. 找出数组游戏的赢家

给你一个由 不同 整数组成的整数数组 arr 和一个整数 k 。 每回合游戏都在数组的前两个元素(即 arr[0] 和 arr[1] )之间进行。比较 arr[0] 与 arr[1] 的大小,较大的整数将会取得这一回合的胜利并保留在位置 0 ,较小的整数移至数组…

[附源码]计算机毕业设计JAVA竞价拍卖系统

[附源码]计算机毕业设计JAVA竞价拍卖系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis M…

Spring 源码阅读 04:BeanFactory 初始化

本篇要阅读的是 BeanFactory 初始化的部分,也就是 refresh 方法中的这一行方法调用: // Tell the subclass to refresh the internal bean factory. // 这里会调用模版方法,通过子类的实现,初始化 BeanFactory 并解析 XML 配置 C…

企业快速构建可落地的IT服务管理体系的五大关键点

随着数字化转型的发展,IT运维管理环境日益复杂,对管理的要求也随之增高如何提升运维效率,快速落地做好运维管理,搭建一套IT服务管理必不可少,以往我们也对IT服务管理框架进行过总结,当下,面对很…

Linux ALSA 之三:简单的 ALSA Driver 实现

简单的 ALSA Driver 实现一、概述二、Linux ALSA 音频设备驱动实例1、注册 Platform Device & Platform Driver2、创建 card3、PCM 设备相关设定3.1 创建 PCM Device3.2 设置 PCM 操作3.2 PCM HW 初始化4、Control 设备相关设定4.1 定义 snd_kcontrol_new4.2 构造 control5…

C语言实现冒泡排序(图解)

目录 一、冒泡排序是什么? 二、图解冒泡排序过程 三、代码实现 3.1易错点(切记切记) 四、优化 4.1优化代码 一、冒泡排序是什么? int arr[]{9,8,7,6,5,4,3,2,1,0} ,像这样的数组,升序排序。 冒泡排序…

Dynamic Potential-Based Reward Shaping将势能塑形奖励函数拓展为F(s,t,s‘,t‘)

摘要 基于势能的奖励塑形可以显著降低学习最优策略所需的时间,并且在多agent系统中,可以显著提高最终联合策略的性能。已经证明,它不会改变一个agent单独学习的最优策略或多个agent一起学习的纳什均衡。 ------然而,现有证明的一…

正厚软件-软件测试用例设计方法之二-边界值

正厚软件-刘老师的干货分享 上一课我们学习测试用例的等价类划分法,今天我们看下边界值法。 一、方法简介 1、定义:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充。 2、边界值与等价类…

Linux零拷贝原理学习

文章目录一、为什么要有 DMA 技术?二、传统的文件传输有多糟糕?三、如何优化文件传输的性能?四、 如何实现零拷贝?mmap writesendfile使用零拷贝技术的项目五、PageCache 有什么作用?六、大文件传输用什么方式实现?一…

c++动态创建二维数组和释放

动态创建二维数组和释放 文章目录创建参考博客😊点此到文末惊喜↩︎ 创建 指针数组的方式 使用malloc和free可以兼容c相比于使用STL可以更加灵活但是debug可能数组显示不全 // 初始化int **arr;int row 5;//用于表示行数int col 5;//用于表示列数arr new int…

网站升级HTTPS教程

现在越来越多的网站开始使用https协议,其实百度从2014年底就已经开始支持https了,并且据说在排名上,同权重的网站,开启https会优待提升排名。先不管排不排名吧,https是一种更安全更先进的技术。作为互联网的弄潮儿&…

MPU9250数据转换

MPU9250数据转换1. MPU92501.1 MPU9250介绍2. 数据转换2.1 陀螺仪数据转换2.2 加速度数据转换1. MPU9250 1.1 MPU9250介绍 1)MPU9250 内部集成有 3 轴陀螺仪、3 轴加速度计和 3 轴磁力计 2)输出: 16 位的数字量; 3) 通过集成电路…

MCE | 免疫检查点大组团

提到免疫,总会让人联想到由免疫失调引起的疾病,例如病毒感染,自身免疫病类风湿性关节炎,癌症等。实际上,机体的免疫应答受到严格的调控,并存在多种机制预防对自身蛋白的免疫反应。在过去的 20 年中&#xf…

3.2、封装成帧

3.2、封装成帧 3.2.1、封装成帧 数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧 在帧头和帧尾中包含有重要的控制信息 数据链路层将上层交付下来的协议数据单元封装成帧后,通过物理层将构成帧的各比特转换成电信号发送到传输媒体 那么接收方的数据…

dreamweaver作业静态HTML网页设计——摩尔庄园7页HTML+CSS+JS DW大学生网页作业制作设计 Dreamweaver简单网页

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

15_移动端项目或者前后端分离项目接口规范

15_移动端项目或者前后端分离项目接口规范写在前面的话,主要是谈谈接口 随着前后端的分离,后端工程师不需要编写页面,甚至不需要编写JavaScript代码,只需要提供接口给前端工程师即可,可是就是仅仅一个接口&#xff0c…