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.rhkb.cn/news/307443.html

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

相关文章

功能测试_验证某城市电话号码的正确性

案例&#xff1a;验证某城市电话号码的正确性 功能测试_等价类设计用例&#xff1a; 步骤&#xff1a; 1:明确需求&#xff1a;电话号码是否正确 2:划分等价类&#xff1a;有效等价类、有效取值、无效等价类、无效取值 3&#xff1a;提取数据编写用例&#xff1a;用例编号…

运营商名称 是如何显示到 手机通知栏上的?

在我们日常使用手机的过程中&#xff0c;经常会在通知栏或设置菜单中看到特定的运营商名称&#xff0c;例如"中国移动"、"中国联通"或"中国电信"等。 那么&#xff0c;这些运营商的名称是如何出现在我们手机上的呢&#xff1f;手机又是如何区分不…

npm 切换成淘宝源,以及遇到npm 报错如何解决

淘宝源&#xff1a;npm config set registryhttps://registry.npmmirror.com/ 然后再npm下 package-lock.json这个删了 npm i再试一下

解决npm run dev跑项目,发现node版本不匹配,怎么跑起来?【已解决】

首先问题点就是我们npm run dev 运行项目的时候发现出错&#xff0c;跑不起来&#xff0c;类型下面这种 这里的出错的原因在于我们的node版本跟项目的版本不匹配 解决办法 我这里的问题是我的版本是node14的&#xff0c;然后项目需要node20的&#xff0c;执行下面的就可以正…

Day:007(1) | Python爬虫:高效数据抓取的编程技术(scrapy框架使用)

Scrapy的介绍 Scrapy 是一个用于抓取网站和提取结构化数据的应用程序框架&#xff0c;可用于各种有用的应用程序&#xff0c;如数据挖掘、信息处理或历史存档。 尽管 Scrapy 最初是为网络抓取而设计的&#xff0c;但它也可用于使用API提取数据或用作通用网络爬虫。 Scrapy的优势…

c语言例题,求数组中最大值,99乘法口诀表

例题1&#xff1a;求出数组中最大的值 根据题意&#xff0c;我们知道的是需要从一个数组中找到一个最大的元素并且输出。那首先我们先建立一个数组&#xff0c;然后将一些不有序的整型元素放到数组中&#xff0c;然后再建立一个变量来存放数组中的第一个元素&#xff0c;通过一…

校园通用型发生网络安全事件解决方案

已知校园多教学楼、多教学机房、非标网络机房缺乏防护设备、检测设备、安全保护软件(杀软) 切断所有外网&#xff0c;断网处理!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 部署路由系统可选择爱快、routeros、openwrt。等。可将日志上传到日志分析系统。《这项非必要的》 部署开源防火…

[入门到放弃]设计模式-笔记

模块化设计 20240448 模块不包含数据&#xff0c;通过实例的指针&#xff0c;实现对实例的操作&#xff1b;唯一包含的数据是用于管理这些模块的侵入式链表模块只负责更具定义的数据结构&#xff0c;执行对应的逻辑&#xff0c;实现不同实例的功能&#xff1b; 参考资料 使用…

洛谷题单 -- 图论的简单入门

B3643 图的存储 链接 : 图的存储 - 洛谷 思路 : 这一题要考察图的存储方式 , 一般可以使用邻接矩阵 或 邻接表来存储 图的结点 和1 边的信息 &#xff0c;详情请看代码 : 代码 #include<bits/stdc.h> using namespace std;const int N 1010 ; int n , m ; int …

STM32F407+DHT11采集数据

1、DHT11简介 DHT11 与单片机之间能采用简单的单总线进行通信&#xff0c;仅仅需要一个 I/O 口。传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机&#xff0c;数据采用校验和方式进行校验&#xff0c;有效的保证数据传输的准确性。DHT11 功耗很低&#xff0c;5V 电源电…

零售行业数字化广告评价标准 - 《IAB/MRC零售(广告)测量指南》

IAB/MRC零售&#xff08;广告&#xff09;测量指南 --- 最新标准&#xff0c;2024年1月发布 目录 1出台此标准的目的是什么&#xff1f;2标准宗旨3本标准的主要关键领域4为什么这对品牌和零售商很重要5能给零售媒体中小型玩家带来什么机会&#xff1f;6评价零售媒体效果的最…

221 基于matlab编制的直齿圆柱齿轮应力计算程序

基于matlab编制的直齿圆柱齿轮应力计算程序&#xff0c;输入设计参数&#xff1a;模数、齿顶高、齿宽、啮合齿数、转速、扭矩、安全系数、压力角、齿轮类型&#xff08;开式、闭式&#xff09;等&#xff0c;输出弯曲应力和许用应力&#xff0c;并对比是否满足要求。并把程序成…

RestTemplate—微服务远程调用—案例解析

简介&#xff1a;总结来说&#xff0c;微服务之间的调用方式有多种&#xff0c;选择哪种方式取决于具体的业务需求、技术栈和架构设计。RESTful API和HTTP客户端是常见的选择&#xff0c;而Feign和Ribbon等辅助库可以简化调用过程。RPC和消息队列适用于特定的场景&#xff0c;如…

小剧场短剧剧集收费短剧小程序APP

1. 内容展现 付费、免费、任务解锁&#xff1a;用户可以通过付费直接观看短剧&#xff0c;也可以通过完成平台任务&#xff08;如签到、分享等&#xff09;获得免费观看的机会。这种灵活的解锁方式既满足了用户的多种需求&#xff0c;也促进了平台的活跃度。主流展现形式&…

HarmonyOS分布式应用框架深入解读

随着越来越多设备的智能化&#xff0c;在多设备场景下应用开发面临以下挑战&#xff1a;从多设备的形态差异&#xff08;不同大小、不同分辨率、不同形状的屏幕&#xff0c;多样化的交互方式–按钮、触屏、键盘、语音、手势等&#xff09;&#xff0c;多设备的能力差异&#xf…

【python】图像边缘提取效果增强方法-高斯模糊

一、介绍 高斯模糊是一种常用的图像处理技术&#xff0c;用于减少图像中的噪声和细节。它通过对图像中的每个像素点进行加权平均来实现模糊效果。具体而言&#xff0c;高斯模糊使用一个高斯核函数作为权重&#xff0c;对每个像素点周围的邻域进行加权平均。这样可以使得每个像…

R语言数据可视化:基本绘图系统

目录 plot函数 par函数 hist函数 boxplot函数 plot函数应用实战 全局参数 R语言中有三大绘图系统包括基本绘图系统&#xff0c;Lattice绘图系统&#xff0c;ggplot2绘图系统 基本绘图系统 在R语言中&#xff0c;以下函数通常用于创建和定制图形&#xff1a; plot 函数…

谷歌推出适用于安卓设备的“Find My Device”网络,功能类似苹果Find My

谷歌今日推出了适用于安卓设备的“Find My Device”网络&#xff0c;其功能类似于苹果的“Find My”网络&#xff0c;旨在帮助用户定位丢失、被盗的安卓产品。 安卓的“Find My Device”网络可以利用数以亿计运行 Android 9 或更高版本的安卓设备&#xff0c;通过蓝牙信号追踪丢…

Windows联网状态工具TCPView

文章目录 TCPView命令行工具更多Sysinternals Suite工具 TCPView TCPView用于显示系统上所有 TCP 和 UDP 终结点的详细列表&#xff0c;包括本地和远程地址以及 TCP 连接的状态&#xff0c;界面如下。 列表的表头含义如下 表头含义表头含义Process name应用名称Process id进程…

【电控笔记6】电流回路+延迟效应

问题提出 数字控制系统的delay: 5.4节有介绍T0=0.5TS 低通滤波器的时间常数? 可用示例程序 m2 2 1b 如下图画出开环系统的伯德图进行比较,如图 2-2-4 所示,由于延迟组件会侵蚀系统的相位,因此从图可以看出,加入延迟效应后,q轴电流回路的相位裕度(Phase Margin) 从…