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 into
   student (name,id,class_id) 
values 
   ('小何',7,2);

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

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

结果为:

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

3.右连接

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

语法:

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

示例:

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

select
   student.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;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 基于微信小程序的校园请教小程序的研究与实现,附源码

博主介绍&#xff1a;✌程序员徐师兄、10年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447…

【网络捉鬼记】微信可以部分网页可以,其它网页打不开提示无法找到NDS地址

蹭网蹭得好好的&#xff0c;为啥突然这样呢&#xff1f; 发现微信可以&#xff0c;百度搜索网页可以打开但图片出不来&#xff0c;再点一个新闻进去又是上图的样子。 问AI&#xff01;却发现连质谱清言也打不开&#xff01;用自己热点问&#xff1a; 至于win10怎么更换DNS&…

弹幕功能1

今天看pure-admin的时候发现有个弹幕功能 GitHub - hellodigua/vue-danmaku: 基于 Vue 的弹幕交互组件 | A danmaku component for Vue

场景文本检测识别学习 day02(AlexNet论文阅读、ResNet论文精读)

怎么读论文 在第一遍阅读的时候&#xff0c;只需要看题目&#xff0c;摘要和结论&#xff0c;先看题目是不是跟我的方向有关&#xff0c;看摘要是不是用到了我感兴趣的方法&#xff0c;看结论他是怎么解决摘要中提出的问题&#xff0c;或者怎么实现摘要中的方法&#xff0c;然…

NumPy进阶(二)

2. NumPy进阶(二) 2.1 Numpy数组操作 2.1.1 添加元素 numpy.append 函数在数组的末尾添加值。 追加操作会分配整个数组&#xff0c;并把原来的数组复制到新数组中 注意&#xff1a; 插入的维度要保证所有数组的长度是相同的如果没有指定轴&#xff0c;数组会被扁平处理 ndarr…

《极域多媒体教室互动管理系统软件》控制方法大全

前言及背景&#xff1a; 当我坐在电脑前&#xff0c;打开它&#xff0c;点开谷歌&#xff0c;刚刚想打开百度&#xff0c;突然闪出来了&#xff1a; 该网页已被阻止&#xff01;&#xff01;&#xff01; 正文&#xff1a; 1.极域控制原理&#xff1a; 好…

Oracle表空间满清理方案汇总分享

目录 前言思考 一、第一种增加表空间的数据文件数量达到总容量的提升 二、第二种解决方案针对system和sysaux的操作 2.1SYSTEM表空间优化 2.2sysaux表空间回收 2.2.1针对sysaux的表空间爆满还有第二套方案维护 三、第三种解决方案使用alter tablespace resize更改表空间的…

3D空间坐标到2D屏幕坐标

1、相机矩阵 2、投影矩阵 3、相平面矩阵 4、应用 漫游 案例一&#xff1a;实时修改View Matrix的三个分量&#xff0c;可以实现在三维场景中漫游。比如&#xff0c;要在场景中移动&#xff0c;可以修改视点位置 Eye&#xff1b;要拐弯了&#xff0c;修改参考点center&#xf…

SpringBoot第一个hello world项目

文章目录 前言一、Spring Boot是什么&#xff1f;二、使用步骤1. 创建项目2.书写测试 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了…

matlab学习002-函数及流程控制语句

目录 一&#xff0c;matlab编程基础 1&#xff09;matlab脚本和函数文件 ①脚本文件 ②函数文件 2&#xff09;函数的定义和调用 ①定义 ②调用 3&#xff09;程序流程控制 ①使用for求 122^2……2^622^63之和 ②使用while语句求122^2……2^622^63之和 ③使用matl…

Android设备使用DS file远程访问群晖NAS管理本地文件

文章目录 1. 群晖安装Cpolar2. 创建TCP公网地址3. 远程访问群晖文件4. 固定TCP公网地址5. 固定TCP地址连接 DS file 是一个由群晖公司开发的文件管理应用程序&#xff0c;主要用于浏览、访问和管理存储在群晖NAS&#xff08;网络附加存储&#xff09;中的文件。这个应用程序具有…

P8602 [蓝桥杯 2013 省 A] 大臣的旅费【树的直径】

P8602 [蓝桥杯 2013 省 A] 大臣的旅费 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> #include <algorithm> #include <vector> using namespace std; #define int long long const int N5e5100; int n; int res0; typedef pair<int,…

wireshark抓包新手使用教程

Wireshark是非常流行的网络封包分析软件&#xff0c;可以截取各种网络数据包&#xff0c;并显示数据包详细信息。常用于开发测试过程各种问题定位。本文主要内容包括&#xff1a; 1、Wireshark软件下载和安装以及Wireshark主界面介绍。 2、WireShark简单抓包示例。通过该例子学…

排序算法—快速排序

文章目录 快速排序一、递归实现二、非递归实现总结 快速排序 以下均以排升序为最终目的。 一、递归实现 有一个排序能解决所有问题吗&#xff1f;没有&#xff01;不过&#xff0c;快速排序这种排序适用于大多数情况。 我们前面讨论排序算法一般都是先讨论一趟的情况&#…

服务器开发 Socket 相关函数

Socket 函数 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol)domain: AF_INET 这是大多数用来产生 socket 的协议&#xff0c;使用TCP或UDP来传输&#xff0c;用IPv4的地址 AF_INET6 与上面类似&#xff0c;不过…

Lua热更新(AssetBundle)

AssetBundle 新版本导入ab包报错,则删除其中的Tests文件夹。 给资源分组 打包设置:平台、路径、重复打包清空文件夹、复制到streaming文件夹 建议勾选 建议使用LZ4压缩方式 用来观察文件中的包大小,不常用 参数总结: 这六个只做了解,重要的是上面的

Cali Linux上的PoshC2安装和使用

一、安装PoshC2 curl -sSL https://raw.githubusercontent.com/nettitude/PoshC2/master/Install-for-Docker.sh | sudo bash二、创建工程 posh-project -n test三、修改配置文件 posh-config将图中的baidu.com改为自己要攻击的域名或者IP地址 四、执行 posh-server 显示没…

不牺牲算法,不挑剔芯片,这个来自中科院的团队正在加速国产AI芯片破局

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 不降低大模型算法精度&#xff0c;还能把芯片的算力利用效率提升 2~10 倍&#xff0c;这就是…

基于ssm餐厅点菜管理系统论文

摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此餐厅点菜信息的…

KNN分类算法的MATLAB实现以及可视化

一、KNN简介 KNN算法&#xff0c;即K-Nearest Neighbors&#xff0c;是一种常用的监督学习算法&#xff0c;可以用于分类问题&#xff0c;并且在实际应用中取得了广泛的成功。 二、KNN算法的基本原理 对于给定的测试样本&#xff0c;KNN算法首先计算它与训练集中所有样本的距…