MySQL数据库操作-2

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL数据库操作

MySQL数据库操作-1

https://developer.aliyun.com/article/1517096


查询结果去重

例如:

a96773dbd0225850d10791e6dd4bbca6_b71618bea81e4f838a77de322483e67c.png


里面有221分的重复项,使用distinct关键字,如下


select distinct math + chinese + english as 总分 from exam_result;

070154eab518fe5ba6ee4a68d86d6370_b03c6bb7c7ad4e34948ac7b1e347da40.png

他会把重复的去掉,只留下一个数据.


如果distinct指定多个列的话,则这些列的值都相同,才视为重复.

查询结果排序

单权重

使用order by 来对查询结果排序.可能是升序~~也可能是降序~~

例如,存在以下表:


以math的数据为权重,来对查询结果进行一个排序:


select id, math from exam_result order by math;

默认升序(从上往下递增)

cbd7532b43f7802c18ad936335b6de6e_0c5b558c2385475e9cf65bf942fb3a73.png


或者在order by 权重 后面加一个 desc(descend)来让它以降序排序:


select*from exam_result order by math desc;

还可以使用asc表示升序.


但是,如果在查询的时候没有指定使用order by,则此时的查询结果的顺序时不可预期的.


多权重

如果一个order by 权重后面还有一个权重,形如:


select*from 表名 order by weight1, weight2, weight3.....

那么,排序就会先按照weight1的权重进行升序或者是降序排序,如果weight1这一列里面有相同的数据,那么这些相同的数据会根据weight2的权重进行升序或者是降序排序....以此类推.


条件查询

在筛选,查询的过程中指定查找的条件(符合条件的数据留下,不符合的去除)


描述条件

MySQL中使用一系列的运算符,搭配where来描述:

比较运算符

运算符

说明

< <= > >=

小于,小于等于,大于,大于等于

=

等于,NULL不安全,NULL = NULL的结果为NULL

<=>

等于,NULL安全,NULL <=> NULL结果为TRUE(1)

between a0 and a1

范围匹配,[a0, a1], a0 <= value <= a1, 返回TRUE(1)

in(ex1,ex2,ex3, ..... )

如果数据属于ex1,ex2,ex3,......其中任意一个,返回TRUE(1)

is NULL

是空(NULL)

is not NULL

不是空(NULL)

like

模糊匹配, %表示任意多个(包括0个)字符; _表示任意一个字符


不支持+=运算符


例如:查找英语分数<60的人


select*from exam_result where english < 60;

67e76e49e28de2c9a1d04e3e0713d559_2302952890294dcfb30157cacb056391.png

相当于对当前表进行遍历,取出每一条数据,看条件是否满足如果满足,这个记录就会被保留,作为结果集的一部分,否则这个记录就不会被记录,然后继续遍历下一个数据.


也可以直接拿两个列进行比较:


select*from exam_result where math > chinese;

06f79549c1a7ee80368f2fc1a4ee7dc7_7e5c4693ee854dda840477939d643fbd.png

但是要注意null的比较,例如:

72f5d8ca8924ad4d3f3f7f8bb9294a72_aee94071cd03453792236fb10698ffb2.png


如果使用=对含有null的表达式进行比较,结果还是null => 相当于false,其数据就不会被记录


所以要使用<=>来比较含有null的数据,例如 null <=> null 结果为true;


逻辑运算符

运算符

说明

and

多个条件都为TRUE(1),结果才为TRUE(1)

or

任意条件为TRUE(1),结果才为TRUE(1)

not

条件为TRUE(1),结果为FALSE(0)



注意:and 和 or 存在一个优先级问题, and 的优先级 > or 的优先级,所以先执行and ,后执行or


例如:


select*from exam_result where chinese > 80 and english > 80;

select*from exam_result where chinese > 80 or math > 80;


比较或者逻辑运算中的表达式查询

例如


select*from exam_result where math + chine + english< 250;

d667ccda7764901ce0af1289f31d0ba9_c7e74f846648443b848cafc2071d12c7.png

但是,条件查询里面的比较的对象不能是前面数据的小名,例如:


select id, math + chinese + english as total from exam_result where total < 250;


写下一个sql不是从前往后的执行, 执行顺序是有特殊规定的:

69d0f4d26c4f9fb09e1e95f134b338d5_d07b82a0ebca4109861af8d2e38b7c54.png

  1. 遍历每一行


  1. 把这一行带入到where后面的条件判断里面去


  1. 符合条件的结果,再根据select指定的列,进行查询/计算.


模糊查询

不要求元素完全相同,只要满足一定的规则就可以了,正则表达式就是模糊匹配的典型实现.


like支持两个用法:


  • 使用 %表示0个或者n个字符,例如 '张%'就是匹配所有以张开头的数据,如果是'张三%',就匹配所有以张三开头的数据.同理'%张'是查询以'张'结尾的数据.若是'%张%',则是查询包含'张'的数据.


  • 使用 _ 代表任意一个字符,例如'张_' ,就会匹配张开头,后面_可以代表任意的字符


例如:

6b34dd4b6862c28ee93924e68397d0f3_7059ab085e8545ed8e5dcdeb0e33e7c6.png


select*from exam_result where name like '张%';

查询name中以'张'开头的数据有哪些


select*from exam_result where name like '张_';

85c89d4256efcdbaef33c875eaa0051e_567a0771aa824082be607d9bf17a1d4c.png

分页查询

有时候数据量太大了,大量数据在一页里面显示, 查看者难免有时候会看不过来, 一方面系统压力也比较大,所以就设置了分页查询,这也是我们生活中经常看到的例子,如下:

对于一个表:

f5fbb29dbd3d152203038b66a04403b2_7f6efd9c531041f2850d9a28f9ab85f0.png


如果我只想看前三条,该怎么办?使用:


select * from exam_result limit 3;

4914f9ab885e520e3601f49ce92e14b4_188b503f6e1349679c1211b8a64a9ca5.png

如果需要选定某几条,可以使用offset来改变偏移量,可以类比数组,第一行数据的下标为0,第二行的数据下标为1,.....以此类推:


select * from exam_result limit 3 offset 1;

bbdddf69acaec805fee08cf75a1df3d4_e75986a26b3b44aa9ce0dd99114f7646.png

这种写法等价于:


select * from exam_result limit 1,3;

存在表:

使用update关键字来修改:


update 表名 set value1 = xx, value2 = xx, value3 =xx, ... where 条件


例如:


update exam_result set chinese = 60, math = 60, english = 60 where name = '张三';

结果如下:

045a118817c635bd7ee739d1f0df7bf5_78cfb94ad0024c87b0901633a3fa4791.png


但是如果加30之后超过了math的decimal(4,2)的范围,就会出现out of range 的异常


若对表中的chinses数据减半操作如下:


update exam_result set chinese = chinses / 2;

238331702dd495e3c2effc5e3a48c398_2915cc6b4fac4928b339bc564b87f3da.png

但是下面的执行结果出现了:


30040105d71100af56d221311bf07b7b_872569b2949b4886a0a78d5d41af08e7.png

其中包含一个warnings


使用:show warnings; 来显示错误


结果如下:

6da04990f66ac6328e46ea445f5567d9_f7c7d58b8ad5406b8c367ee016f769de.png


Message:Data truncated for column 'chinses' at row 2;

意为数据截断,小数点后面不够用了,只能截断.错误出现在第二行


正常来讲,60.5 / 2 的结果为30.25,但是由于decimal(3,1)只能保留小数点一位,而0.25有两位小数,所以发生了截断,其中的0.05被直接舍弃.


注意:update这个操作非常危险!!!


使用delete,意为删除,是按照行(记录)来删除的.

delete from 表名 where 条件;

例如:


delete from exam_result where math <=> null;

b62e4d11a03f6ffcef192b1253c085af_e992b05632cd4db8bdd28dc2dde68992.png


同时也可以搭配like(模糊匹配);


直接删除表中的所有数据:


delete from 表名;

这种情况表还存在,但是表中的数据已经全部清除了.

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
关系型数据库 MySQL
MYSQL-多表操作-外键约束
MYSQL-多表操作-外键约束
|
9天前
|
存储 关系型数据库 MySQL
MySql创建带事务操作的存储过程
MySql创建带事务操作的存储过程
|
1天前
|
SQL 关系型数据库 MySQL
MySQL数据库——事务操作-begin-commit-rollback
MySQL数据库——事务操作-begin-commit-rollback
6 1
|
1天前
|
SQL 关系型数据库 MySQL
MySQL单表操作学习DDL_DML_DQL语句
MySQL单表操作学习DDL_DML_DQL语句
7 0
|
2天前
|
SQL 关系型数据库 MySQL
go 通过sql操作mysql
go 通过sql操作mysql
11 1
|
3天前
|
存储 关系型数据库 MySQL
MYSQL--存储过程操作
MYSQL--存储过程操作
|
3天前
|
安全 关系型数据库 MySQL
MYSQL--视图操作
MYSQL--视图操作
|
5天前
|
缓存 分布式计算 关系型数据库
数据管理DMS操作报错合集之当进行RDS实例的可用区迁移时,提示“缓存清理”是什么意思
数据管理DMS(Data Management Service)是阿里云提供的数据库管理和运维服务,它支持多种数据库类型,包括RDS、PolarDB、MongoDB等。在使用DMS进行数据库操作时,可能会遇到各种报错情况。以下是一些常见的DMS操作报错及其可能的原因与解决措施的合集。
|
5天前
|
DataWorks 关系型数据库 MySQL
DataWorks操作报错合集之在尝试连接到MySQL数据库时遇到了“Communications link failure”错误,如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5天前
|
SQL 关系型数据库 MySQL
Python 操作 MySQL 数据库
Python 操作 MySQL 数据库

推荐镜像

更多