MySQL约束和查询

约束和查询

  • 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.hqwc.cn/news/28408.html

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

相关文章

Python自动获取字母站视频

如果有疑问的话可以在我的谈论群&#xff1a;706128290 来找我 目录 前言 二、编写代码 1.引入库 2.编写主类 3. 自动获取cookies值和生成headers 4.获取命令行参数 运行效果 前言 browser_cookie3 第三方模块 browser_cookie3是browser_cookie模块的分支&#xff0c;…

小白到运维工程师的自学之路 第五十四集 (ansible自动化运维工具)

一、概述 Ansible是一种开源的自动化工具&#xff0c;用于自动化任务的执行、配置管理和应用部署。它采用基于Python编写的简单、轻量级的语法&#xff0c;可以通过SSH协议远程管理和配置多台计算机。 Ansible的主要特点包括&#xff1a; 1、简单易用&#xff1a;设计简单&a…

Redis数据结构 — List

目录 链表结构设计 ​编辑链表节点结构设计 链表的优势与缺陷 Redis 的 List 对象的底层实现之一就是链表。C 语言本身没有链表这个数据结构的&#xff0c;所以 Redis 自己设计了一个链表数据结构。 链表结构设计 typedef struct list {//链表头节点listNode *head;//链表…

顺序结构

基本概念顺序表实现Arraylist类使用&#xff1a;小小练习 基本概念 数据结构&#xff1a;描述和组织数据的方式。 数据结构的两种分类方式逻辑结构和物理结构&#xff1a; 逻辑结构&#xff1a;数据元素之间的相互关系&#xff1b;逻辑结构分以下四种。 1&#xff1a;集合&…

Ubuntu查找并安装指定版本包

命令如下: #查看指定包信息 apt-cache show kubeadm | grep 1.23.2 #安装指定版本 apt-get install kubeadm1.23.2-00

浙大数据结构第四周之04-树5 Root of AVL Tree

题目详情&#xff1a; An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Fi…

安卓进程间通信浅谈

Case: /Users/lucas/AndroidStudioProjects/aidldemo-master 一&#xff1a;操作系统 从操作系统原理去看&#xff0c;进程通信主要有三个方法&#xff1a;共享存储、消息传递、管道通信。 二&#xff1a;安卓中的IPC 进程间通信的几种方式&#xff1a;Intent&#xff08;Bu…

计网笔记--应用层

目录 1--网络程序的组织方式和关系 2--动态主机配置协议&#xff08;DHCP&#xff09; 3--域名系统DNS 4--文件传输协议FTP 5--电子邮件 7--万维网WWW 7-1--HTTP的报文格式 7-2--Cookie 7-3--万维网缓存和代理服务器 1--网络程序的组织方式和关系 网络应用程序在各种…

7.12~7.13学习总结

public static void main(String[] args){File dirnew File("D:\\小花花");boolean flag dir.mkdir();System.out.println(flag);File dirsnew File("D:\\小花花\\你爸爸");dirs.mkdirs();String[]adir.list();//列出下一级&#xff1b;字符串数组for(Stri…

【群智能算法改进】一种改进的猎人猎物优化算法 IHPO算法[1]【Matlab代码#49】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 原始HPO算法2. 改进后的IHPO算法2.1 Cubic映射初始化2.2 透镜成像折射反向学习2.3 强制切换策略 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节&#xff1a;资源获取】 1. 原始HPO算法 此算法…

深入浅出关于网易邮箱开启smtp服务教程

各平台邮箱开启SMTP服务教程 一、QQ邮箱 &#xff08;服务器地址&#xff1a;smtp.qq.com&#xff09; 第一步&#xff1a;复制https://mail.qq.com/ 登录QQ邮箱后电击左上角设置&#xff0c;如图&#xff1a; 第二步&#xff1a;点击进入“帐户”页面 &#xff0c;如图&…

AJAX异步请求JSON数据格式

目录 前言 1.AJAX的实现方式 1.1原生的js实现方式 1.2JQuery实现方式 2.1语法 3.JSON数据和Java对象的相互转换 3.1将JSON转换为Java对象 3.2将Java对象转换为JSON 前言 AJAX&#xff1a;ASynchronous JavaScript And XML 异步的JavaScript 和 XML。 Ajax 是一种在…