MySQL的基础操作(二)

news2024/11/25 14:28:37

目录

一.数据库约束

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;

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

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

相关文章

OpenHarmony开发——CMake方式组织编译的库移植

概述 本文为OpenHarmony开发者提供一些组织编译形式比较常见&#xff08;CMakeLists、Makefile&#xff09;的三方库的移植指南&#xff0c;该指南当前仅适用于Hi3516DV300和Hi3518EV300两个平台&#xff0c;文中着重介绍各编译组织方式下工具链的设置方法以及如何将该库的编译…

NJU PA0

NJU PA0 使用教程提供的源再进行sudo apt install … 可能会出现 Unmet dependencies 此类报错 可以安装 aptitude sudo apt install aptitude sudo aptitude install <package>然后它会提示你&#xff0c;选 n 进行降级。再选 Y 确认 或者 将 /etc/apt/sources.list 下…

SpringSecurity登录时在哪里调用我们自定义的UserDetailsServiceImpl

SpringSecurity登录时在哪里调用我们自定义的UserDetailsServiceImpl 1、请求login方法 2、将用户的用户名和密码封装成一个对象&#xff0c;以便进行后续的认证操作 3、执行认证操作 4、调用providermanager类的authenticate 5.进入这一步就开始跟我们自定义实现的UserDet…

带头结点的双向循环链表操作集

分数 50 作者 伍建全 单位 重庆科技大学 本题要求实现一个带头结点的双向循环链表操作集。 函数接口定义&#xff1a; typedef int dataType;typedef struct _node {dataType data;struct _node *prev;//指向前驱的指针struct _node *next;//指向后继的指针 }node;typedef…

Windows安装MongoDB结合内网穿透轻松实现公网访问本地数据库

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

PandasAI的应用与实战解析(二):PandasAI使用流程与功能介绍

文章目录 1.使用PandasAI进行开发的流程2.配置文件解析3.支持的数据库类型4.支持的LLMs5.其他 PandasAI这个工具最突出的优点就是通过结合了Pandas和生成式LLMs&#xff0c;极大地为开发人员降低了工作量。 传统的开发调用流程&#xff08;数据分析相关&#xff09;&#xff1a…

秒杀购物商城核心服务 — 商品管理中心(前提设计概要)

秒杀购物商城核心服务 前提介绍商品中心中台支持系统-总体架构设计&#xff1a;商品与产品商品 类目属性类目定义前后台类目后台类目&#xff0c;关注标准化管理类目属性及分类 SKUSPU 属性库建设 前提介绍 在电商系统中&#xff0c;商品模型占据着举足轻重的地位&#xff0c…

AI赋能档案开放审核:实战

关注我们 - 数字罗塞塔计划 - 为进一步推进档案开放审核工作提质增效&#xff0c;结合近几年的业务探索、研究及项目实践&#xff0c;形成了一套较为成熟、高效的AI辅助档案开放审核解决方案&#xff0c;即以“AI人工”的人机协同模式引领档案开放审机制创新&#xff0c;在档…

TyG新文章!与胸痛的高发生率正相关 | NHANES数据库周报(4.10)

NHANES挖掘培训班来啦&#xff0c;就在4.20-21&#xff01; 郑老师团队2024年NHANES公共数据库挖掘培训班&#xff0c;由浅入深&#xff0c;零基础可学&#xff0c;欢迎报名&#xff01; 美国国家健康和营养检查调查&#xff08;NHANES&#xff09;是一项旨在评估美国成人和儿童…

Python通过socket搭建一个web服务器

目录 01、源码 02、运行结果 03、小结 Socket是一种计算机网络通信的一种机制&#xff0c;它允许不同计算机或进程之间通过网络进行数据传输和通信。Socket可以被看作是不同计算机之间的数据传输通道&#xff0c;通过这个通道&#xff0c;计算机之间可以进行双向的数据传输。…

区块链游戏:探索未来的可能性与挑战

区块链游戏是一种将区块链技术应用于游戏领域的创新产品&#xff0c;它为游戏行业带来了全新的模式和可能性。本文将深入探讨区块链游戏的优点、挑战和未来趋势&#xff0c;帮助读者了解这一新兴领域。 一、区块链游戏的优点 1. 公平性&#xff1a;区块链技术保证了游戏中的物…

LeetCode-Java:303、304区域检索(前缀和)

文章目录 题目303、区域和检索&#xff08;数组不可变&#xff09;304、二维区域和检索&#xff08;矩阵不可变&#xff09; 解①303&#xff0c;一维前缀和②304&#xff0c;二维前缀和 算法前缀和一维前缀和二维前缀和 题目 303、区域和检索&#xff08;数组不可变&#xff…

二叉树遍历算法和应用

二叉树是指度为 2 的树。它是一种最简单却又最重要的树&#xff0c;在计算机领域中有这广泛的应用。 二叉树的递归定义如下&#xff1a;二叉树是一棵空树&#xff0c;或者一棵由一个根节点和两棵互不相交的分别称为根节点的左子树和右子树所组成的非空树&#xff0c;左子树和右…

【数据结构】07查找

查找 1. 基本概念2. 顺序表查找2.1 顺序查找2.2 顺序查找优化-哨兵 3. 有序表查找3.1 折半查找&#xff08;二分查找&#xff09; 4. 分块查找&#xff08;索引顺序查找&#xff09;5. Hash表&#xff08;散列表&#xff09;5.1 散列函数的设计5.2 代码实现5.2.1 初始化Hash表5…

再谈C语言——理解指针(一)

内存和地址 内存 在讲内存和地址之前&#xff0c;我们想有个⽣活中的案例&#xff1a; 假设有⼀栋宿舍楼&#xff0c;把你放在楼⾥&#xff0c;楼上有100个房间&#xff0c;但是房间没有编号&#xff0c;你的⼀个朋友来找你玩&#xff0c; 如果想找到你&#xff0c;就得挨个房…

【C++11】异常知多少

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握C11异常 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! > 专栏选自&#xff1a;C嘎嘎进阶 &g…

Ubuntu22.04 + ROS2 Humble的环境配置

Ubuntu22.04 ROS2 Humble的环境配置 文章目录 Ubuntu22.04 ROS2 Humble的环境配置(1) Set locale(2) Setup Sources(3)安装ROS2(4)检查是否成功安装 参考官方网站ROS2-Installation ROS2的各种版本及维护计划&#xff0c;可以参考ROS2-List of Distributions (1) Set locale…

gitlab、jenkins安装及使用文档二

安装 jenkins IP地址操作系统服务版本192.168.75.137Rocky9.2jenkins 2.450-1.1 jdk 11.0.22 git 2.39.3192.168.75.138Rocky9.2gitlab-ce 16.10.0 结合上文 jenkins安装 前期准备&#xff1a; yum install -y epel-release yum -y install net-tools vim lrzsz wget…

AIGC的崛起:定义未来内容创作的新纪元

&#x1f31f;文章目录 &#x1f31f;AIGC简介&#x1f31f; AIGC的相关技术与特点&#x1f31f;AIGC有哪些应用场景&#xff1f;&#x1f31f;AIGC对其他行业影响&#x1f31f;面临的挑战与问题&#x1f31f;AIGC未来发展 &#x1f31f;AIGC十大热门网站推荐&#xff1a; 文心…

一键开启Scrum回顾会议的精彩时刻

其实回顾会议作为一个检视、反馈、改进环节&#xff0c;不仅在传统的瀑布管理模式中&#xff0c;还是在Scrum一类的敏捷管理流程中&#xff0c;都是非常重要的活动。一些团队认为它无法产生直接的价值&#xff0c;所以有意忽略了这个会议&#xff1b;一些团队在越来越多的回顾中…