138 张图带你 MySQL 入门(2)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 138 张图带你 MySQL 入门(2)

DML 语句


有的地方把 DML 语句(增删改)和 DQL 语句(查询)统称为 DML 语句,有的地方分开,我们目前使用分开称呼的方式


插入


表创建好之后,我们就可以向表里插入数据了,插入记录的基本语法如下


INSERT INTO tablename (field1,field2) VALUES(value1,value2);


例如,向中插入以下记录



insert into job(name,sex,age,hiredate,birthday,salary) values("cxuan","男",24,"2020-04-27","1995-08-22",8000);


也可以不用指定要插入的字段,直接插入数据即可


insert into job values("cxuan02","男",25,"2020-06-01","1995-04-23",12000);


这里就有一个问题,如果插入的顺序不一致的话会怎么样呢?


对于含可空字段、非空但是含有默认值的字段、自增字段可以不用在 insert 后的字段列表出现,values 后面只需要写对应字段名称的 value 即可,没有写的字段可以自动的设置为 NULL、默认值或者自增的下一个值,这样可以缩短要插入 SQL 语句的长度和复杂性。


比如我们设置一下 hiredate、age 可以为 null,来试一下


insert into job(name,sex,birthday,salary) values("cxuan03","男","1992-08-23",15000);


image.png


我们可以看到有一行两个字段显示 NULL。在 MySQL 中,insert 语句还有一个很好的特性,就是一次可以插入多条记录


INSERT INTO tablename (field1,field2) VALUES
(value1,value2),
(value1,value2),
(value1,value2),
...;


可以看出,每条记录之间都用逗号进行分割,这个特性可以使得 MySQL 在插入大量记录时,节省很多的网络开销,大大提高插入效率。



更新记录


对于表中已经存在的数据,可以通过 update 命令对其进行修改,语法如下


UPDATE tablename SET field1 = value1, field2 = value2 ;


例如,将 job 表中的 cxuan03 中 age 的 NULL 改为 26,SQL 语句如下


update job set age = 26 where name = 'cxuan03';


SQL 语句中出现了一个 where 条件,我们会在后面说到 where 条件,这里简单理解一下它的概念就是根据哪条记录进行更新,如果不写 where 的话,会对整个表进行更新


删除记录


如果记录不再需要,可以使用 delete 命令进行删除


DELETE FROM tablename [WHERE CONDITION]


例如,在 job 中删除名字是 cxuan03 的记录


delete from job where name = 'cxuan03';


image.png


在 MySQL 中,删除语句也可以不指定 where 条件,直接使用


delete from job


这种删除方式相当于是清楚表的操作,表中所有的记录都会被清除。


DQL 语句


下面我们一起来认识一下 DQL 语句,数据被插入到 MySQL 中,就可以使用 SELECT 命令进行查询,来得到我们想要的结果。


SELECT 查询语句可以说是最复杂的语句了,这里我们只介绍一下基本语法


一种最简单的方式就是从某个表中查询出所有的字段和数据,简单粗暴,直接使用 SELECT *


SELECT * FROM tablename;


例如我们将 job 表中的所有数据查出来


select * from job;


image.png



其中 * 是查询出所有的数据,当然,你也可以查询出指定的数据项


select name,sex,age,hiredate,birthday,salary from job;


上面这条 SQL 语句和 select * from job 表是等价的,但是这种直接查询指定字段的 SQL 语句效率要高。


上面我们介绍了基本的 SQL 查询语句,但是实际的使用场景会会比简单查询复杂太多,一般都会使用各种 SQL 的函数和查询条件等,下面我们就来一起认识一下。


去重


使用非常广泛的场景之一就是 去重,去重可以使用 distinct 关键字来实现


为了演示效果,我们先向数据库中插入批量数据,插入完成后的表结构如下


image.png


你会发现只有两个不同的值,其他和 25 重复的值被过滤掉了,所以我们使用 distinct 来进行去重


条件查询


我们之前的所有例子都是查询全部的记录,如果我们只想查询指定的记录呢?这里就会用到 where条件查询语句,条件查询可以对指定的字段进行查询,比如我们想查询所有年龄为 24 的记录,如下


select * from job where age = 24;


where 条件语句后面会跟一个判断的运算符 =,除了 = 号比较外,还可以使用 「>、<、>=、<=、!=」 等比较运算符;例如


select * from job where age >= 24;


image.png


就会从 job 表中查询出 age 年龄大于或等于 24 的记录


除此之外,在 where 条件查询中还可以有多个并列的查询条件,比如我们可以查询年龄大于等于 24,并且薪资大雨 8000 的记录


select * from job where age >= 24 and salary > 8000;


image.png


多个条件之间还可以使用 or、and 等逻辑运算符进行多条件联合查询,运算符会在以后章节中详细讲解。


排序


我们会经常有这样的需求,按照某个字段进行排序,这就用到了数据库的排序功能,使用关键字 order by 来实现,语法如下


SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC] , field2 [DESC|ASC],……fieldn [DESC|ASC]]


其中 DESC 和 ASC 就是顺序排序的关键字,DESC 会按照字段进行降序排列,ASC 会按照字段进行升序排列,默认会使用升序排列,也就是说,你不写 order by 具体的排序的话,默认会使用升序排列。order by 后面可以跟多个排序字段,并且每个排序字段可以有不同的排序顺序。


为了演示功能,我们先把表中的 salary 工资列进行修改,修改完成后的表记录如下


image.png


下面我们按照工资进行排序,SQL 语句如下


select * from job order by salary desc;


语句执行完成后的结果如下


image.png


这是对一个字段进行排序的结果,也可以对多个字段进行排序,但是需要注意一点


根据 order by 后面声名的顺序进行排序,如果有三个排序字段 A、B、C 的话,如果 A 字段排序字段的值一样,则会根据第二个字段进行排序,以此类推。

如果只有一个排序字段,那么这些字段相同的记录将会无序排列。


限制


对于排序后的字段,或者不排序的字段,如果只希望显示一部分的话,就会使用 LIMIT 关键字来实现,比如我们只想取前三条记录


select * from job limit 3;


image.png


上面这种 limit 是从表记录的第 0 条开始取,如果从指定记录开始取,比如从第二条开始取,取三条记录,SQL 如下


select * from job order by salary desc limit 2,3;


limit 一般经常和 order by 语法一起实现分页查询。

注意:limit 是 MySQL 扩展 SQL92 之后的语法,在其他数据库比如 Oracle 上就不通用,我犯过一个白痴的行为就是在 Oracle 中使用 limit 查询语句。。。





相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
7月前
|
存储 监控 关系型数据库
轻松入门Mysql:MySQL性能优化与监控,解锁进销存系统的潜力(23)
轻松入门Mysql:MySQL性能优化与监控,解锁进销存系统的潜力(23)
127 0
|
7月前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
636 0
|
7月前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
159 0
|
7月前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:MySQL 备份与恢复,保护数据安全,提高工作效率(20)
轻松入门MySQL:MySQL 备份与恢复,保护数据安全,提高工作效率(20)
115 0
|
3月前
|
关系型数据库 MySQL 数据库
MySQL基本操作入门指南
MySQL基本操作入门指南
90 0
|
7月前
|
存储 关系型数据库 MySQL
MySQL基础入门:数据库操作全攻略
MySQL基础入门:数据库操作全攻略
165 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL入门到精通
MySQL入门到精通
|
5月前
|
SQL 关系型数据库 MySQL
「Python入门」python操作MySQL和SqlServer
**摘要:** 了解如何使用Python的pymysql模块与MySQL数据库交互。首先,通过`pip install pymysql`安装模块。pymysql提供与MySQL的连接功能,例如创建数据库连接、执行SQL查询。在设置好MySQL环境后,使用`pymysql.connect()`建立连接,并通过游标执行SQL(如用户登录验证)。注意防止SQL注入,使用参数化查询。增删改操作需调用`conn.commit()`来保存更改。pymssql模块类似,但导入和连接对象创建略有不同。
64 0
「Python入门」python操作MySQL和SqlServer
|
5月前
|
SQL 关系型数据库 MySQL
【MySQL从入门到精通】常用SQL语句分享
【MySQL从入门到精通】常用SQL语句分享
61 2