MySQL对表操作(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL对表操作(上)

结束了上一章内容,我们对数据库的操作有一定的了解,本章内容就是针对表中的数据进行操作的。


针对表中数据的操作绝大部分都是增删改查(CRUD),CRUD也就是四个单词的缩写:


增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete);


这也是数据库存在的主要目的。


CRUD


增加(Create)


增加即向表中插入数据,上一章中已经提到过了,基本语法如下:


insert into 表名 value(值1,值2......);【单行插入】

insert into 表名 values(值1,值2......),(值1,值2......);【多行插入】


例如:


f2adf2da45444b75b164949b9c2316c2.png


02bf385bf85243edaa731698b8d0d62d.png


values 方式插一行,插多行都可以,但是value每次只能插入一行记录。


查询(Retrieve)


全列查询


如上图,我们用的是 *  的方式是全列查询,上一章也提到,对于大数据的查询是非常危险的,带宽会被这一条语句占满,服务器不可能只服务一个用户端。


指定列查询


有时候呢,我们一张表有很多的数据,比如一个人,有年龄,性别,名字,是否已婚,等等....;但是我们有时候又不是需要全部信息,我们只需要取一部分,那么这就需要我们的指定列查询了。

还是拿 student 表来举例:我们拿出所有学生的名字:

aad38142a57e41e9b71b3f3bb829ad34.png


否则就会报错:

17ea2dbe730c4f6a98ccbfef566793d2.png

查询字段为表达式


select 表达式 对比结果如下:


cbf07b51375344eeb66b41dfa501bfde.png


别名


为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称,语法:


SELECT column [AS] alias_name [...] FROM table_name;

就是有时候我们不想让列名那么奇怪,或者我们像简单点表示列名,那就需要用到别名。


例如,我们设置一个成绩表,并添加数据:


63a69457096f4b948b6861989d14bf3e.png

39fc6bcafe3e4ea7ad43e1a3919a6acd.png

我想查询每个人的总分数:

我们可以怎么写:

5bd2db238f8b4cc8bc345bc95b24ca74.png


这时候我们看这个总分的列名非常不好,于是可以用到别名:


a9546e61f2ab41fe970cf418bf67209d.png


这下舒服多了!


去重:DISTINCT


使用DISTINCT关键字对某列数据进行去重;

就拿上面的分数表来说,我再次添加一个数据:

0a5a68c5015a4749b3292f24e4835cdd.png


我们现在查询数学成绩看看结果:


26203f9f076640eb83012b9927cf34bd.png

去重也就是取出重复数据,我们来试试看:

9e1184f012044edc82b241f1531d4dd1.png

结果的确是将重复数据剔除了。


排序:ORDER BY


上学时期每次考完试,班主任总会对学生的总分进行排序,我们这里也不例外;

我们也可以对上面总成绩进行一个排序;

语法如下:

-- ASC 为升序(从小到大)

-- DESC 为降序(从大到小)

-- 默认为 ASC

SELECT ... FROM table_name [WHERE ...]

ORDER BY column [ASC|DESC], [...];


结果如下:

d7adcc1896ac4b2aad0a7b1776c3999e.png

我们也可以升序排序:


10167a07a2c441e190e0ffca8c32ae93.png

asc 是升序,默认也是升序; desc 的 全拼是 descend(下降)。


条件查询:WHERE


我们在查询的时候会对一些数据进行筛选,并非全部数据都是我们需要的,而 where 条件查询也分很多:

比较运算符:


运算符 说明
>, >=, <, <= 大于,大于等于,小于,小于等于
= 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=> 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <> 不等于
BETWEEN a0 AND
a1
范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, ...) 如果是 option 中的任意一个,返回 TRUE(1)
IS NULL 是 NULL
IS NOT NULL 不是 NULL
LIKE 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字


举个例子:

比如我想查找,总分大于250 分的所有同学,我们可以这么写:

821d8c3ed03f489daf78eabc5f972468.png


但是我觉得怎么写,sum 总分不好看,我们再换一种写法:

d9a6c38639d344379687b3efbe7da0be.png


这里我们发现,sum是未定义的,为什么呢?

起别名是在进行排序的时候起的,而排序是在 where 筛选之后才有的,当然找不到sum列了

1516b2e939694326b6ec437d821e471e.png

我们发现这样的写法也是错误的,那么只能:

7fd913cddf2c4ba9aae980483cda3162.png


除了比较运算符,还有其他的的运算符:

逻辑运算符


运算符 说明
AND 多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR 任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT 条件为 TRUE(1),结果为 FALSE(0)


相信大家对逻辑运算符是不陌生的,在Java中不知道写过多少了。

举例:

我要查询数学和语文都大于90 分的全部信息:

我们就可以用and语句来执行:


02b83b1822de475892ceefa965a8f754.png


或者,我要查询,语文或数学大于 90 的人:


5fd19d231bc6412c8bb766b67ea04f8b.png


对条件查询做个小结:


1. WHERE条件可以使用表达式,但不能使用别名。

2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分


对上面的查询,我就不一一举例了,没事的时候,可以自己动手试一试,光是看无法提升自己的能力,不会的时候可以动手查;反正现在是学习时间,有足够的时间试错!


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
SQL 运维 关系型数据库
MySQL 中 GRANT 操作会引起复制中断吗?
GRANT 操作并不是一个原子性操作,不管执行成功与否,都会触发一个隐式重载授权表的行为。 在生产环境中需要规范用户创建及授权的操作,不推荐使用 DML 语句去直接变更 mysql.user 表,可能会引发其他的问题,若使用了 DML 语句进行变更, 需要手工执行 flush privileges。
69 4
|
5月前
|
JavaScript 关系型数据库 MySQL
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
67 0
|
5月前
|
存储 关系型数据库 文件存储
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
51 2
|
5月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之运行mysql to doris pipeline时报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之整库同步mysql到starRock提交任务异常,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5月前
|
SQL 关系型数据库 MySQL
「Python入门」python操作MySQL和SqlServer
**摘要:** 了解如何使用Python的pymysql模块与MySQL数据库交互。首先,通过`pip install pymysql`安装模块。pymysql提供与MySQL的连接功能,例如创建数据库连接、执行SQL查询。在设置好MySQL环境后,使用`pymysql.connect()`建立连接,并通过游标执行SQL(如用户登录验证)。注意防止SQL注入,使用参数化查询。增删改操作需调用`conn.commit()`来保存更改。pymssql模块类似,但导入和连接对象创建略有不同。
67 0
「Python入门」python操作MySQL和SqlServer
|
5月前
|
SQL Java 数据库
MySQL设计规约问题之为什么应尽量避免使用子查询,而可以考虑将其优化为join操作
MySQL设计规约问题之为什么应尽量避免使用子查询,而可以考虑将其优化为join操作
|
5月前
|
分布式计算 DataWorks 关系型数据库
MaxCompute操作报错合集之配置mysql数据源querysql模式,同步到MC时遇到报错,该怎么处理
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
5月前
|
DataWorks 关系型数据库 MySQL
DataWorks操作报错合集之从OceanBase(OB)数据库调度数据到MySQL数据库时遇到连接报错,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。