MySQL的基础操作(二)

目录

一.数据库约束

1.主键约束 (Primary Key)

2.唯一约束 (Unique)

3.外键约束 (Foreign Key):

4.检查约束(Check)

5.默认约束 (Default)

二.聚合查询

1.简单聚合函数

2.GROUP BY子句

3.HAVING子句

三.联合查询

1.内连接

2.左连接

3.右连接

4.子查询

5.合并查询


一.数据库约束

数据库约束是用于保证数据完整性和一致性的重要机制,它可以应用在表的列级别或表级别。以下是常见的数据库约束类型:

1.主键约束 (Primary Key)

  • 主键约束用于唯一标识表中的每一行数据。
  • 每个表只能有一个主键。
  • 主键列不允许包含NULL值。
  • 主键可以是单列或多列的组合

示例:

CREATE TABLE STUDENT (id INT PRIMARY KEY,name VARCHAR(20),qq_mail VARCHAR(20)
);
//设定学生表中的id字段为外键

2.唯一约束 (Unique)

  • 唯一约束确保列中的数据是唯一的,但允许NULL值。
  • 每个表可以有多个唯一约束。
  • 可以在单列或多列上定义唯一约束。

示例:

CREATE TABLE student (id INT UNIQUE,name VARCHAR(20),qq_mail VARCHAR(20)
)
//将学生表中的id字段设置为unique,表示为唯一的、不重复的

3.外键约束 (Foreign Key):

  • 外键约束用于建立表之间的关联关系。
  • 它指定一个或多个列作为外键,这些外键值必须存在于另一个表的主键或唯一约束中。
  • 外键可以防止对父表的引用数据进行意外的更改或删除。

语法:

foreign key (字段名) references 主表(列)
create table class(id int primary key,class_name varchar(20),
);
//先创建一个班级表class,使id为主键create table class(id int primary key,name varchar(20),classes_id int,foreign key (classes_id) references class(id)
);
//再创建一个学生表,使用id为主键,classes_id为外键,关联班级表id

4.检查约束(Check)

  • 检查约束用于限制列中允许的值的范围。
  • 可以基于表达式或条件来定义检查约束,如果条件为假,则不允许插入或更新数据。

示例:

CREATE TABLE Grades (StudentID INT, Score INT CHECK (Score >= 0 AND Score <= 100)
);
//在一个学生成绩表中,使用检查约束确保分数在0到100之间

5.默认约束 (Default)

  • 默认约束定义了列在没有明确指定值时应该使用的默认值。
  • 当插入新行或更新行时,如果未提供值,则数据库将使用默认值。

示例:

CREATE TABLE Employees (EmployeeID INT, Name VARCHAR(50), HireDate DATE DEFAULT CURRENT_DATE
);
//在一个员工表中,将入职日期设置为当前日期作为默认值

6.非空约束 (Not Null):

  • 非空约束确保列中的值不为空值 (NULL)。
  • 当尝试插入或更新行时,如果指定了该列,并且值为NULL,则会产生错误。

示例:

CREATE TABLE Users (UserID INT, Username VARCHAR(50) NOT NULL
);
//在一个用户表中,确保用户名不为空

二.聚合查询

1.简单聚合函数

  • COUNT(): 计算某列的行数,或者满足特定条件的行数。
  • SUM(): 计算指定列的总和。
  • AVG(): 计算指定列的平均值。
  • MIN(): 计算指定列的最小值。
  • MAX(): 计算指定列的最大值。

示例:

select avg(math) from student;
//计算学生表数学成绩的平均值select sum(math) from student;
//计算学生表数学成绩的总和select max(math) from student;
//计算学生表数学成绩的最大值

2.GROUP BY子句

将结果集按照指定列进行分组,并对每个分组应用聚合函数。

语法:

select column1, sum(column2), .. from table group by column1,column3;

示例:

create table student (id int,name varchar(20),grade varchar(5),math decimal(3,1),chinese decimal(3,1),english decimal(3,1)
);
//先创建一个学生表select grade 年级,max(math+chinese+english) 总分 from student group by grage;
//查询每个年级的最高分并以年级分组
(有多少年级就分成多少组,每一个组当成单独的一张表并查询其中的最高分)  

3.HAVING子句

GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用 HAVING

示例:

create table student (id int,name varchar(20),grade varchar(5),math decimal(3,1),chinese decimal(3,1),english decimal(3,1)
);
//先创建一个学生表select grade 年级, count(*) 总人数 from student group by grade having count(*)>200;
//查找总人数超过200的年级  

三.联合查询

实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:

在介绍之前,先创建好要示例的表:

create table student (-> id int ,-> name varchar(30),-> e_mail varchar(30),-> class_id int-> );
//创建学生表用于储存学生个人信息create table grade(-> course varchar(20),-> student_id int,-> score int-> );
//创建成绩表用于储存学生的各科成绩

填充数据后为

1.内连接

  • 内连接返回两个表中匹配连接条件的行,如果某行在其中一个表中没有匹配的行,则不会包含在结果集中。
  • 内连接使用的语法是 INNER JOIN 或简写形式 JOIN
  • 内连接只返回两个表中连接条件匹配的行,不会返回任何一个表中没有匹配的行。

语法:

select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;//两种写法都可以

示例:

select student.name, grade.course, grade.score 
from student,grade 
where student.id=grade.student_id;//查询学生的姓名与对应的课程名称和成绩
//注意限定条件是学生表的id与成绩表的student_id相等

结果为:

2.左连接

  • 左连接返回左表中的所有行,以及右表中匹配连接条件的行。如果右表中没有匹配的行,则返回 NULL 值。
  • 左连接使用的语法是 LEFT JOIN
  • 左连接会保留左表中没有匹配的行,并在右表中没有匹配的行处填充 NULL 值。

语法:

select 字段名  from 表名1 left join 表名2 on 连接条件;

示例:

我们先往学生表添加一个新的学生小何,但是成绩表没有添加对应的成绩

insert intostudent (name,id,class_id) 
values ('小何',7,2);

接着查询学生表左连接成绩表

select student.name, grade.course, grade.score 
from student left join grade 
onstudent.id=grade.student_id;

结果为:

可以看到,小何明明没有成绩也出现在结果中了,这就是左连接保留左表多余的数据

3.右连接

  • 右连接与左连接相反,返回右表中的所有行,以及左表中匹配连接条件的行。如果左表中没有匹配的行,则返回 NULL 值。
  • 右连接使用的语法是 RIGHT JOIN
  • 右连接会保留右表中没有匹配的行,并在左表中没有匹配的行处填充 NULL 值。

语法:

select 字段 from 表名1 right join 表名2 on 连接条件;

示例:

与上方一样添加学生小何,但是查询成绩表右连接学生表

selectstudent.name, grade.course, grade.score 
from grade right join student 
on student.id=grade.student_id;

结果为:

可以看到,将两表调换后,小何明明没有成绩也出现在结果中了,这就是右连接保留右表多余的数据

4.子查询

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

示例:

如果现在想寻找与小明同班的同学

select * 
from student 
where class_id=(select class_id from student where name='小明');

结果为:

5.合并查询

MySQL中的合并查询指的是使用UNIONUNION ALL操作符将多个SELECT语句的结果合并成一个结果集。合并查询通常用于将多个相似的查询结果合并在一起,以便在单个结果集中检索数据

UNION操作符

UNION操作符用于合并多个SELECT语句的结果,并去除重复的行。

SELECT column1 FROM table1
UNION
SELECT column1 FROM table2;

UNION ALL操作符

UNION ALL操作符用于合并多个SELECT语句的结果,包括重复的行。

SELECT column1 FROM table1
UNION ALL
SELECT column1 FROM table2;

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

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

相关文章

大数据实训进行时:数据标注项目

数据标注项目 培训目的 让同学们先熟悉理论知识&#xff0c;如&#xff1a;识别障碍物是否满足拉框的要求&#xff0c;如何进行拉框&#xff1b;熟悉标注操作&#xff0c;培养出能够进入正式项目的人员 培训地点 理论&#xff1a;学术报告厅、阶梯教室 实操&#xff1a;1实…

【WPF应用42】WPF中的 GroupBox 控件详解

在 Windows Presentation Foundation (WPF) 中&#xff0c;控件是构建用户界面 (UI) 的基础。WPF 提供了丰富的控件库&#xff0c;其中包括 GroupBox 控件&#xff0c;它用于将相关的 UI 元素组织到逻辑分组中。在本博客文章中&#xff0c;我们将详细介绍 GroupBox 控件的功能、…

自己整理的ICT云计算题库四

14. 【多选题】 CIFS 支持的认证方式是以下哪些选项&#xff1f; A: A 全局认证 B: B LADP 域 C: C 本地认证 D: D AD 域 答案 正确答案&#xff1a;ACD 解释 全局认证为先本地&#xff0c;后AD&#xff0c;再LADP 15. 【单选题】 华为 oceanstor v3 smarterase 在使用时…

基于linux进一步理解核间通讯

芯片架构分为同构和异构: 如下图TC397: 如下图TDA4: 如下图STM32MP157: 非对称多处理结构(AMP): AMP 结构是指每个内核运行自己的 OS 或同一 OS 的独立实例&#

MTK Android13 霸屏实现

一、背景 在台式POS场景下&#xff0c;经常有应用会需要获取霸屏的权限&#xff0c;隐藏状态栏或者导航栏&#xff0c;且不能被划出&#xff0c;其实系统已经系统了隐藏状态栏也导航栏的接口&#xff0c;但是无法做到禁止滑出。 View decorView ((Activity) context).getWin…

Day53 动态规划 part14

Day53 动态规划 part14 1143.最长公共子序列 我的思路&#xff1a; 模仿昨天的最大重复子序列长度的思路&#xff0c;可以列出如下状态转移方程 对着状态转移方程写代码即可&#xff0c;还是需要注意&#xff0c;i, j是从1开始的&#xff0c;比较的时候是str1[i -1]和str2[j…

【PG-1】PostgreSQL体系结构概述

1. PostgreSQL体系结构概述 代码结构 其中&#xff0c;backend是后端核心代码&#xff0c;包括右边的几个dir: access&#xff1a;处理数据访问方法和索引的代码。 bootstrap&#xff1a;数据库初始化相关的代码。 catalog&#xff1a;系统目录&#xff08;如表和索引的元数据…

数据结构4:基于单链表的通讯录项目

文章目录 头文件SList.hContact.h 实现文件SList.cContact.c 测试代码 头文件 SList.h #pragma once#include<stdio.h> #include<stdlib.h> #include<assert.h> #include"Contact.h"//typedef int SLDataType; typedef PersonInfo SLDataType;//…

2024年第十四届MathorCup数学应用挑战赛B题解题思路

B题https://mbd.pub/o/bread/ZZ6Wm5dx 问题1:对于附件I(Pre_test文件夹)给定的三张甲骨文原始拓片图 片进行图像预处理&#xff0c;提取图像特征&#xff0c;建立甲骨文图像预处理模型&#xff0c;实现对 甲骨文图像干扰元素的初步判别和处理。 针对问题1&#xff0c;对于附件…

【研发效能·创享大会-嗨享技术轰趴】-IDCF五周年专场

一、这是一场创新分享局&#xff01; 来吧&#xff0c;朋友们! 参加一场包含AIGC、BizDevOps、ToB产品管理、B端产品运营、平台工程、研发效能、研发度量、职业画布、DevOps国标解读的研发效能创享大会&#xff0c;会有哪些收益呢&#xff1f; 知识更新与技能提升&#xff1a;…

在线批量生成URL HTML单页网页程序

输入前缀、开始数字、结束数字、后缀 即可快速生成 几万、十万、百万 条链接。 支持 一键复制、 一键导出本地 txt 文件。 源码免费下载地址抄笔记 (chaobiji.cn)

Conda 常用命令总结

创建虚拟环境 conda create -n name python[your_version] 激活环境 conda activate name 退出环境 conda deactivate 查看虚拟环境 conda info --envs 删除虚拟环境 conda remove -n name --all 删除所有的安装包及cache(索引缓存、锁定文件、未使用过的包和tar包) …

java的jar包jakarta.jakartaee-web-api和jakarta.servlet-api有什么区别

jakarta.jakartaee-web-api和jakarta.servlet-api都是Java EE&#xff08;现在是 Jakarta EE&#xff09;中的一部分&#xff0c;用于开发基于Java EE平台的Web应用程序。它们之间的区别在于以下几点&#xff1a; 命名空间&#xff1a; jakarta.servlet-api是Java EE 8之前版本…

linux中常用命令(未完待续)

linux中常用命令&#xff08;未完待续&#xff09; 复制/移动文件夹&#xff1a;在Linux中移动/复制文件夹到另一个目录中 # *********************删除文件夹↓********************************* # 要删除一个文件夹&#xff0c;最常见的方法是使用rm命令。 # PS&#xff1…

CSS3 常用样式

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 ✍CSS3 常用样式&#x1f48e;1 CSS3 新增选择器&#x1f339;1.1 属性选择器…

使用ego-planner进行无人机控制时的数据流(自用)

本文将详细介绍如何使用ego-planner向无人机发送控制指令&#xff0c;实现自动控制的过程。我们将探讨ego-planner的运行方式以及控制指令的传输过程&#xff0c;涉及到ROS节点、MAVROS协议以及无人机的控制器等方面。 在实现自动控制时&#xff0c;控制指令的传输是至关重要的…

R语言 多组堆砌图

目录 数据格式 普通绘图 添加比例 R语言 堆砌图_r语言堆砌图-CSDN博客 关键点在于数据转换步骤和数据比例计算步骤&#xff0c;然后个性化调整图。 ①data <- melt(dat, id.vars c("ID"))##根据分组变为长数据 ②#计算百分比## data2 <- ddply(data, …

大学生毕业答辩要点

不要太老实 暗号①:论文的创新点体现在哪里? 你就答:本篇毕业论文的创新之处在于讨论XXX的问题时不仅在xxx方面列出xxx,也从实际的角度进行了举例论证。一是在方法上,本文将xxx方法与xxx方法相结合,能多有效消除单方法带来的误差有效提高了数据的精度(结果的有效性)二…

Go 使用ObjectID

ObjectID介绍 MongoDB中的ObjectId是一种特殊的12字节 BSON 类型数据&#xff0c;用于为主文档提供唯一的标识符&#xff0c;默认情况下作为 _id 字段的默认值出现在每一个MongoDB集合中的文档中。以下是ObjectId的具体组成&#xff1a; 1. 时间戳&#xff08;Timestamp&…

Ollama、FastGPT大模型RAG结合使用案例

参考: https://ollama.com/download/linux https://doc.fastai.site/docs/intro/ https://blog.csdn.net/m0_71142057/article/details/136738997 https://doc.fastgpt.run/docs/development/custom-models/m3e/ Ollama作为后端大模型加载运行 FastGPT作为前端页面聊天集成RA…