MySQL 约束与复杂查询

news2025/1/13 13:43:29

当涉及到数据库管理系统(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;

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

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

相关文章

[maven] 创建 spring boot 项目及使用 Jenkins 运行 maven

[maven] 创建 spring boot 项目及使用 Jenkins 运行 maven 本篇笔记走一下用 maven 创建 spring boot 项目和利用 Jenkins 管理 maven 流程 使用 maven 创建 spring boot 项目 根据官方文档说&#xff0c;现在使用 boot 需要 java 17&#xff0c;Gradle 7.5/Maven 3.5 spri…

idea无法通过vpn 连接到数据库或者kafka

本地navicate 等sql客户端 &#xff0c;通过vpn&#xff0c;可以连接到数据库&#xff0c;&#xff0c;xshell也可以通过vpn连接到远程机器&#xff0c;但是&#xff0c;idea开发时&#xff0c;报连接超时错误&#xff0c;解决方法&#xff1a; 项目中 VM这一栏加上-Djava.net…

区块链:去中心化革命下的创新与发展!

区块链作为一项重要的技术实验&#xff0c;确实具有重大的影响力。它代表了一场去中心化的运动&#xff0c;吸引了许多研究人员、工程师、建设者和用户的参与&#xff0c;创造了我们目前所见到的一些最有趣的技术。 区块链的透明特性赋予了用户对于数据和交易的控制权&#xff…

来看看Python __all__变量的用法

​ 事实上&#xff0c;当我们向文件导入某个模块时&#xff0c;导入的是该模块中那些名称不以下划线&#xff08;单下划线“_”或者双下划线“__”&#xff09;开头的变量、函数和类。因此&#xff0c;如果我们不想模块文件中的某个成员被引入到其它文件中使用&#xff0c;可以…

展示日志log4.properties

log4.properties 1.log4.properties 此时文件主要用于展示日志的输出的级别的信息。 # Set root category priority to INFO and its only appender to CONSOLE. #log4j.rootCategoryINFO, CONSOLE debug info warn error fatal log4j.rootCategoryinfo, CONSO…

本地事务与分布式事务

目录 一、本地事务 1、事务的基本性质 2、事务的隔离级别 3、事务的传播行为 4、SpringBoot 事务关键点 二、分布式事务 1、为什么有分布式事务 2、CAP 定理与 BASE 理论 3、分布式事务几种方案 一、本地事务 1、事务的基本性质 数据库事务的几个特性&#xff1a;原…

PhpStorm 2023年下载、安装教程和好用插件,保姆级教程

PhpStorm 2023年下载、安装教程和好用插件&#xff0c;保姆级教程 文章目录 PhpStorm 2023年下载、安装教程和好用插件&#xff0c;保姆级教程前言一、安装PhpStorm二、好用的插件简体中文包Chinese(Simplified)Language Pack 三、卸载插件CTRLN 查找类CTRLSHIFTN 全局搜索文件…

Scala编程语言

Scala编程语言 一、Scala引入1、学习Scala的目的2、Scala的基本概念 二、Scala环境搭建1、安装步骤2、配置环境变量3、测试Scala4、Scala与idea的集成5、关联源码6、 class 和 object 说明 三、常用语法、变量和数据类型1、 注释2、变量和常量3 、标识符的命名规范4、字符串输出…

一阶低通滤波器滞后补偿算法

一阶低通滤波器的推导过程和双线性变换算法请查看下面文章链接: PLC算法系列之数字低通滤波器(离散化方法:双线性变换)_双线性离散化_RXXW_Dor的博客-CSDN博客PLC信号处理系列之一阶低通(RC)滤波器算法_RXXW_Dor的博客-CSDN博客_rc滤波电路的优缺点1、先看看RC滤波的优缺点…

matlab EL image绘制

利用光谱仪测试的结果可以得到image&#xff0c;输出为csv文件&#xff0c;包括640X512的矩阵&#xff0c;这个矩阵将会反映器件发光的位置和强度&#xff0c;算是一个灰度图。 在matlab中&#xff0c;可以用imagesc函数来进行绘图。 imagesc函数的用法 clear; clc; close a…

Linux从root账号切换到普通账号并执行shell脚本

背景&#xff1a;最近自己在用的中间件只能运行在 普通账号下&#xff0c;现在每次重启之后都要切换到 普通账号 然后去执行启动脚本。一次两次还能接受……反正现在接受不了了…… 写一个脚本让它帮我起吧 先贴目录 新建文件 start_es.sh, 用于root账号下调用 #!/bin/bash e…

计算机组成原理——基础入门总结(一)

本帖更新一些关于计算机组成原理的重点内容。由于博主考研时并不会考这门课&#xff0c;但是考虑到操作系统中又很多重要晦涩的概念涉及很多诸如内存、存储器、磁盘、cpu乃至各种寄存器的知识&#xff0c;此处挑选一些核心的内容总结复盘一遍——实现声明&#xff1a;本帖的内容…

【CCF】第30次csp认证——202305-1重复局面

202305-1重复局面&#xff1a; 问题描述 国际象棋每一个局面可以用大小为 88 的字符数组来表示&#xff0c;其中每一位对应棋盘上的一个格子。六种棋子王、后、车、象、马、兵分别用字母 k、q、r、b、n、p 表示&#xff0c;其中大写字母对应白方、小写字母对应黑方。棋盘上无…

[ESP32 IDF+Vscode]蓝牙配网后采用上传温湿度数据至阿里云(MQTT协议)

阿里云平台的设置 参考文章&#xff1a; http://t.csdn.cn/RzLGqhttp://t.csdn.cn/RzLGq Blufi配网 1.简介 BluFi 是一款基于蓝牙通道的 Wi-Fi 网络配置功能&#xff0c;适用于 ESP32。它通过安全协议将 Wi-Fi 配置和证书传输到 ESP32&#xff0c;然后 ESP32 可基于这些信…

OpenGL超级宝典(第五版)疑难点汇总解析

《OpenGL超级宝典(第五版&#xff09;》如下&#xff1a; 1. 在该书的第1章的Block例子中用到了平面阴影投射矩阵&#xff0c;关于该矩阵的推导&#xff0c;参见&#xff1a; OpenGL: 平面阴影投射矩阵的推导 2. 在该书的第8章的pix_buffs例子中用到了正交投影矩阵的推导过程…

腾讯mini项目-【指标监控服务重构】2023-08-23

今日已办 进度和问题汇总 请求合并 feature/venus tracefeature/venus metricfeature/profile-otel-baserunner-stylebugfix/profile-logger-Syncfeature/profile_otelclient_enable_config 完成otel 开关 trace-采样metrice-reader 已经都在各自服务器运行&#xff0c;并接入…

Datagrip 下载、安装教程,详细图文,亲测有效

文章目录 前言1. 下载2. 安装3 DataGrip 常用操作4 推荐阅读 前言 DataGrip 是 JetBrains 发布的多引擎数据库环境&#xff0c;支持 MySQL 和 PostgreSQL&#xff0c;Microsoft SQL Server 和 Oracle&#xff0c;Sybase&#xff0c;DB2&#xff0c;SQLite&#xff0c;还有 Hyp…

RocketMQ快速实战以及集群架构详解

文章目录 1、MQ简介1.1 、定义1.2 、作用 2、RocketMQ产品特点2.1、RocketMQ介绍2.2 、RocketMQ特点 1、MQ简介 1.1 、定义 ​ MQ&#xff1a;MessageQueue&#xff0c;消息队列。是在互联网中使用非常广泛的一系列服务中间件。 这个词可以分两个部分来看 一是Message&#…

SmartApi使用说明

缘起&#xff1a; 搞移动开发十多年了&#xff0c;接口、数据、数据模型、以及数据边界值的处理是需要团队协作解决&#xff0c;而这方面恰恰是总容易导致bug难修复的地方。而一款好用的api调试工具对于后端、前端、测试都是必须必的掌握熟练使用&#xff0c;Api就像人体的血管…

开发、测试、生产环境

开发环境&#xff08;Development Environment&#xff09;&#xff1a; 开发环境是用于开发新功能、修改和调试代码的环境。 在开发环境中&#xff0c;开发人员可以针对特定需求编写和测试代码。 通常&#xff0c;开发环境会模拟完整的系统环境&#xff0c;并提供开发人员所需…