MySQL 约束与复杂查询

2023-09-16 15:08:37

当涉及到数据库管理系统(DBMS)的高级主题时,包括数据库的约束、表的设计以及各种类型的查询,特别是聚合查询、联合查询和合并查询,是非常重要的。这些主题可以帮助我们更好地理解数据库的内部工作机制以及如何有效地操作数据。在这篇博客中,我们将深入探讨这些主题~~

目录

数据库的约束

表的设计

1.一对一关系(One-to-One Relationship):

2.一对多关系(One-to-Many Relationship):

3.多对多关系(Many-to-Many Relationship):

聚合查询

1.SUM():计算列中所有值的总和。

2.AVG():计算列中所有值的平均值。

3.COUNT():计算行的数量或特定列的非空值数量。

4.MAX():找到列中的最大值。

5.MIN():找到列中的最小值。

6.GROUP BY 

7.HAVING

联合查询

合并查询

1.UNION操作符:

2.UNION ALL操作符:


数据库的约束

数据库约束是一种用于确保数据完整性和一致性的方法。以下是一些常见的数据库约束类型:

主键约束(Primary Key):主键用于唯一标识表中的每一行数据。它通常是一个自增的整数。例如:

CREATE TABLE Students (
    student_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50)
);

对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1。 

如图,这里不是3+1,而是100+1~~

-- 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL

id INT PRIMARY KEY auto_increment,

外键约束(Foreign Key):外键用于在两个表之间建立关联关系。例如:

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    product_id INT,
    customer_id INT,
    FOREIGN KEY (product_id) REFERENCES Products(product_id),
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);

唯一约束(Unique Constraint):唯一约束确保列中的所有值都是唯一的。例如,如果你想确保电子邮件地址在表中是唯一的:

CREATE TABLE Users (
    user_id INT PRIMARY KEY,
    email VARCHAR(100) UNIQUE,
    password_hash VARCHAR(255)
);

检查约束(Check Constraint):检查约束用于定义特定条件,以确保数据的有效性。例如,如果你只希望存储年龄大于18的用户:

CREATE TABLE Employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    age INT CHECK (age > 18)
);

默认值约束(Default Constraint):默认值约束用于为列指定默认值。例如,姓名的默认值为“无名氏”

表的设计

表的设计涉及到数据之间的关系,这些关系可以用来描述一对一、一对多、多对一和多对多等不同类型的关系。这些关系有助于确定如何将数据组织成表以满足应用程序的需求。下面我将解释每种关系类型并提供示意图~~

1.一对一关系(One-to-One Relationship)
  • 一对一关系表示两个实体之间的关系,其中一个实体的每个记录对应另一个实体的一个记录。
  • 示例:一个人可以有一个唯一的身份证号,而每个身份证号只能对应一个人。
  • 示意图:

2.一对多关系(One-to-Many Relationship)
  • 一对多关系表示一个实体的每个记录可以对应另一个实体的多个记录。
  • 示例:一个班级可以有多名学生,但每名学生只属于一个班级。
  • 示意图:

 

3.多对多关系(Many-to-Many Relationship)
  • 多对多关系表示多个实体的记录可以相互关联,一个实体可以与多个实体相关联。
  • 示例:多个学生可以选择多门课程,同时一门课程也可以被多个学生选择。
  • 示意图:

聚合查询

聚合查询用于对数据进行汇总和计算。以下是一些常见的聚合函数:

1.SUM():计算列中所有值的总和。
2.AVG():计算列中所有值的平均值。
3.COUNT():计算行的数量或特定列的非空值数量。
4.MAX():找到列中的最大值。
5.MIN():找到列中的最小值。
6.GROUP BY 
  • 作用:GROUP BY 子句用于将查询结果按照一个或多个列的值进行分组。
  • 语法:在 SQL 查询中,GROUP BY 子句位于 WHERE 子句之后,可以跟一个或多个列名,用逗号分隔。
  • 示例:假设我们有一个包含订单信息的表格,我们想要按照客户 ID 对订单进行分组,并计算每个客户的订单总额。
SELECT customer_id, SUM(order_amount)
FROM orders
GROUP BY customer_id;

 在这个例子中,我们将订单表按客户 ID 分组,然后计算每个客户的订单总额。

7.HAVING
  • 作用:HAVING 子句用于在 GROUP BY 子句之后对分组结果进行筛选。
  • 语法:HAVING 子句紧随 GROUP BY 子句之后,可以包含聚合函数和条件表达式。
  • 示例:查询在 2023 年内下了订单总额大于500的客户的订单总额。
SELECT customer_id, SUM(order_amount)
FROM orders
WHERE order_date >= '2023-01-01' AND order_date <= '2023-12-31'
GROUP BY customer_id
HAVING SUM(order_amount) > 500;

联合查询

笛卡儿积:是集合论中的一个概念,用于表示两个或多个集合之间的所有可能的组合。在数据库中,笛卡尔积通常用于联接(JOIN)操作,其中两个表的笛卡尔积表示了它们之间的所有可能的行组合。 

示例: 考虑两个集合 A 和 B,其中 A 包含元素 {1, 2},B 包含元素 {a, b}。它们的笛卡尔积是一个新的集合,包含了所有可能的组合:

以下是一个示意图,展示了集合 A 和 B 的笛卡尔积:

A: {1, 2}
B: {a, b}

A × B:
  (1, a)  (1, b)
  (2, a)  (2, b)

联合查询(也称为JOIN查询)用于从多个表中检索相关数据。常见的JOIN类型包括:

  1. INNER JOIN:返回两个表中匹配的行。
  2. LEFT JOIN:返回左表中的所有行以及与右表匹配的行。
  3. RIGHT JOIN:返回右表中的所有行以及与左表匹配的行。

合并查询

1.UNION操作符
  • UNION用于合并多个查询的结果集,并自动去重重复的行,只返回唯一的行。

示例:假设我们有两个表AB,并且我们希望合并它们的结果并去除重复的行。

SELECT column1 FROM A
UNION
SELECT column1 FROM B;
2.UNION ALL操作符
  • UNION ALL也用于合并多个查询的结果集,但不去重,返回所有行,包括重复的行。

示例:如果我们希望合并表AB的结果,包括重复的行。

SELECT column1 FROM A
UNION ALL
SELECT column1 FROM B;
更多推荐

《DevOps实践指南》- 读书笔记(五)

DevOps实践指南Part4第二步:反馈的技术实践14.建立能发现并解决问题的遥测系统14.1建设集中式监控架构14.2建立生产环境的应用程序日志遥测14.3使用遥测指导问题的解决14.4将建立生产遥测融入日常工作14.5建立自助访问的遥测和信息辐射器14.6发现和填补遥测的盲区14.6.1应用程序和业务度量指标14

【窗体】Winform两个窗体之间通过委托事件进行值传递,基础篇

2023年,第38周。给自己一个目标,然后坚持总会有收货,不信你试试!在实际项目中,我们可能会用到一些窗体做一些小工具或者小功能。比如:运行程序,在主窗体A基础上,点击某个按钮希望能够弹出B窗体,在B窗体完成操作后,希望能够把值传递回到A窗体,然后进行其他业务操作。目录一、显示线上图片二、显示本地图片三、A窗体打开B窗

西瓜书读书笔记整理(六)—— 第六章 支持向量机

第六章支持向量机6.1间隔与支持向量6.1.1什么是支持向量机6.1.2支持向量与间隔6.1.3支持向量机的求解过程6.2对偶问题(dualproblem)6.2.1什么是对偶问题6.2.2如何求解支持向量机的对偶问题6.3核函数(kernelfunction)6.3.1什么是支持向量机的核函数6.3.2常见的几种核函

[NLP] LLM---<训练中文LLama2(五)>对SFT后的LLama2进行DPO训练

当前关于LLM的共识大型语言模型(LLM)使NLP中微调模型的过程变得更加复杂。最初,当ChatGPT等模型首次出现时,最主要的方法是先训练奖励模型,然后优化LLM策略。从人类反馈中强化学习(RLHF)极大地推动了NLP的发展,并将NLP中许多长期面临的挑战抛在了一边。基于人类反馈的强化学习(Reinforcement

算法通关村-----数组中元素出现次数问题

数组中出现次数超过一半的数字问题描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。详见剑指offer39问题分析最直接的方式就是使用hashMap,遍历给定数组,将数字和对应出现次数存储在hashMap中,然后再遍历hashMap,找到出现次数最大

代码随想录算法训练营第三十八天|理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

理论基础无论大家之前对动态规划学到什么程度,一定要先看我讲的动态规划理论基础。如果没做过动态规划的题目,看我讲的理论基础,会有感觉是不是简单题想复杂了?其实并没有,我讲的理论基础内容,在动规章节所有题目都有运用,所以很重要!如果做过动态规划题目的录友,看我的理论基础就会感同身受了。代码随想录视频:从此再也不怕动态规划了

第二篇------Virtual I/O Device (VIRTIO) Version 1.1

上篇文章:https://blog.csdn.net/Phoenix_zxk/article/details/132917657篇幅太大,所以分开写,接下来续上4.3.3.2.1设备要求:Guest->Host通知设备必须忽略GPR2的位0-31(从左边数)。这样可以使子通道ID的传递方式与现有的I/O指令传递方式保持

计算机等级考试信息安全三级填空题-二

1.信息安全的五个根本属性是:机密性、完整性可控性、不可否认性和完整性。2.在Windows系统中,查看当前已经启动的效劳列表的命令是:netstart3.在数据库中,删除表的命令是:DROP4.在信息资产治理中,标准信息系统的因特网组件包括:效劳器、网络设备和保护设备。5.在信息资产治理中,标准信息系统的组成局部包括

开源教育对话大模型 EduChat

文章目录一、🚀前言二、🤖本地部署三、👨‍💻使用示例四、🔎总结🍉CSDN叶庭云:https://yetingyun.blog.csdn.net/一、🚀前言教育是一项对人类身心发展产生影响的社会实践活动,旨在从内在激发人们固有或潜在的素质。因此,我们必须坚持以人为本的教育理念,重点关注个性化、引导式和身心全面

拓世科技集团到访考察吉安青原区:共谋AIGC数字经济产业园发展大计

千帆竞发立潮头,奋勇争先谋发展,在中国这片广袤的大地上,先行者的每一次拓进都是历史的华章,远谋者的每一次交汇都是未来的预言。当红色江西大地与现代科技脉搏共振,当青原区的绿意拥抱拓世科技的AIGC科技,一场关于科技与地区发展的交响曲就此奏响。在这个充满变革与机遇的时代,拓世科技集团与吉安青原区政府携手共谋AIGC产业布局

计算机毕业设计 高校普法系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌🍅文末获取源码联系🍅👇🏻精彩专栏推荐订阅👇🏻不然下次找不到哟————————————————计算机毕业设计题目《10

热文推荐