MySQL 约束与复杂查询

当涉及到数据库管理系统(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.rhkb.cn/news/134036.html

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

相关文章

二叉搜索树经典笔试题【力扣、牛客】

文章目录 1.根据二叉树创建字符串2. 二叉树的层序遍历3.二叉树的层序遍历Ⅱ4.二叉树的最近公共祖先1.法一&#xff1a;定位p、q在左还是右 分类讨论2.法二&#xff1a;利用stack求出p、q路径 求相交值 5.二叉搜索树与双向链表1.法一&#xff1a;递归&#xff1a;递归过程修正指…

Acwing 828. 模拟栈

Acwing 828. 模拟栈 题目要求思路讲解代码展示 题目要求 思路讲解 栈&#xff1a;先进后出 队列&#xff1a;先进先出 代码展示 #include <iostream>using namespace std;const int N 100010;int m; int stk[N], tt;int main() {cin >> m;while (m -- ){string o…

java创建excel文件和解析excel文件

创建excel文件 package com.bjpowernode.crm.poi;import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.HorizontalAlignment;import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.…

leetcode刷题(简单篇):9.回文数

9.回文数 题目描述&#xff1a;给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 例如&…

mybatis mapper.xml转建表语句

从网上下载了代码&#xff0c;但是发现没有DDL建表语句&#xff0c;只能自己手动创建了&#xff0c;感觉太麻烦&#xff0c;就写了一个工具类 将所有的mapper.xml放入到一个文件夹中&#xff0c;程序会自动读取生成建表语句 依赖的jar <dependency><groupId>org.d…

关于Python数据分析,这里有一条高效的学习路径

无处不在的数据分析 谷歌的数据分析可以预测一个地区即将爆发的流感&#xff0c;从而进行针对性的预防&#xff1b;淘宝可以根据你浏览和消费的数据进行分析&#xff0c;为你精准推荐商品&#xff1b;口碑极好的网易云音乐&#xff0c;通过其相似性算法&#xff0c;为不同的人…

Python中Mock和Patch的区别

前言&#xff1a; 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 在测试并行开发&#xff08;TPD&#xff09;中&#xff0c;代码开发是第一位的。 尽管如此&#xff0c;我们还是要写出开发的测试&#xff0c…

教育领域数据可视化:点亮知识之路

教育领域一直以来都在不断进步和演变&#xff0c;而数据可视化技术正在为这一领域带来一场革命。在过去的几年里&#xff0c;教育者们越来越意识到&#xff0c;通过将教育数据转化为可视化图表和图形&#xff0c;可以更好地理解学生的表现、需求和趋势&#xff0c;从而提供更好…

科学计算器网站Desmos网站

科学计算器网站Desmos网站 有时在学习工作或者生活中&#xff0c;需要用到计算问题&#xff0c;但由于电脑上没有安装相应的专业软件&#xff0c;难以计算有的问题&#xff0c;因而&#xff0c;本文推荐一种免费的在线计算网站Desmos。 一、Desmos网址 Desmos官网的地址为&a…

doccano 文本标注工具使用

最近在做面向大模型的文本标注工作&#xff0c;涉及到多人协同的问题&#xff0c;因此用到了doccano工具。 这个工具可以使用docker进行安装&#xff0c;安装之后的启动也都比较简单。 关于基础使用&#xff08;例如管理员登录、新建任务、上传数据集等&#xff09;&#xff…

系统架构设计师(第二版)学习笔记----信息系统基础

【原文链接】系统架构设计师&#xff08;第二版&#xff09;学习笔记----信息系统基础 文章目录 一、信息系统概述1.1 信息系统的5个基本功能1.2 信息系统发展阶段1.3 初始阶段的主要特点1.4 传播阶段的主要特点1.5 控制阶段的主要特点1.6 集成阶段的主要特点1.7 信息系统的种类…

计算机是如何工作的(上篇)

计算机发展史 世界上很多的高科技发明,来自于军事领域 计算机最初是用来计算弹道导弹轨迹的 弹道导弹 ~~国之重器,非常重要 两弹一星 原子弹,氢弹,卫星(背后的火箭发射技术) 计算弹道导弹轨迹的计算过程非常复杂,计算量也很大 ~~ 但是可以手动计算出来的(当年我国研究两弹一…

MySQL架构介绍与说明

1、MySQL架构介绍 和其它数据库相比&#xff0c;MySQL有点与众不同&#xff0c;它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上&#xff0c; 插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的…

【数据结构】C++实现二叉搜索树

二叉搜索树的概念 二叉搜索树又称为二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有结点的值都小于根结点的值。若它的右子树不为空&#xff0c;则右子树上所有结点的值都大于根结…

Spring Boot 动态加载jar文件

Spring Boot 动态加载jar文件 接口实现&#xff1a; package org.bc.device;public interface IDeviceHandler {String start();String stop(); }实现类&#xff1a; package org.bc.device; public class MqttDevice implements IDeviceHandler{ Override public String s…

Linux——Shell脚本编程(2)

一、Shell变量 Linux Shell 中的变量分为&#xff0c;系统变量 和 用户自定义变量 (这个用的比较多)。 系统变量 : $HOME、$PWD、$SHELL、$USER 等等&#xff0c;比如 : echo $HOME 等等.. 显示当前shell中所有变量 : set 举例说明&#xff1a; 二、设置环境变量 记得在注释…

小丑未能阻止抢购iPhone15,预约人数快500万了,而且越贵越买

iPhone15发布后&#xff0c;在昨天开启预约&#xff0c;从某电商平台可以看到预约人数已近300万&#xff0c;加上其他平台&#xff0c;估计预约人数已快500万了&#xff0c;显示出消费者仍然是嘴上说不爱&#xff0c;行动上却是迅速抢购&#xff0c;苹果的真香定律让竞争对手很…

服务器数据恢复-热备盘同步过程中硬盘离线的RAID5数据恢复案例

服务器数据恢复环境&#xff1a; 华为OceanStor某型号存储&#xff0c;11块硬盘组建了一组RAID5阵列&#xff0c;另外1块硬盘作为热备盘使用。基于RAID5阵列的LUN分配给linux系统使用&#xff0c;存放Oracle数据库。 服务器故障&#xff1a; RAID5阵列1块硬盘由于未知原因离线…

postgresql 内核源码分析 btree索引插入分析,索引页面分裂流程,多举措进行并发优化,对异常进行保护处理

Btree索引插入流程分析 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&a…

HCIE-HCS规划设计搭建

1、相关术语 1、等价路由 等价路由&#xff08;Equal-cost routing&#xff09;是一种网络路由策略&#xff0c;用于在网络中选择多个具有相同路由度量&#xff08;路由距离或成本&#xff09;的最佳路径之一来转发数据流量。 当存在多个路径具有相同的路由度量时&#xff0c;…