『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询(下)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询(下)

『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询(上)https://developer.aliyun.com/article/1424459

📂 Retrieve(查询)

在数据库中查询是一个非常频繁的工作,需要根据不同的场合以及不同的条件进行查找;

+----+---------+---------+------+---------+
| id | name    | chinese | math | english |
+----+---------+---------+------+---------+
|  1 | Lihua   |      67 |   88 |      90 |
|  2 | Liming  |      57 |   58 |      70 |
|  3 | Zhaolao |      66 |   80 |      47 |
|  4 | Wu      |      76 |   70 |      47 |
|  5 | Wuqi    |      88 |   43 |      80 |
|  6 | Liqiang |      89 |   92 |      90 |
|  7 | Qinsu   |      90 |   74 |      67 |
|  8 | Zhaoli  |      54 |   74 |     100 |
+----+---------+---------+------+---------+

📌SELECT语句📌

在MySQL中SELECT语句是一个高频语句;

其功能可以根据条件对表数据进行查询;

其查询不单单能对数据,还能对表达式、函数等等…

mysql> select 1+1;
+-----+
| 1+1 |
+-----+
|   2 |
+-----+
1 row in set (0.00 sec)

全列查询 📨

在MySQL中*符号代表通配符;

SELECT * FROM table_name;

该句指令即表示查询表中所有字段(列);

以该中方式即可以打印出表中的所有字段的数据;

mysql> select * from Point;
+----+---------+---------+------+---------+
| id | name    | chinese | math | english |
+----+---------+---------+------+---------+
|  1 | Lihua   |      67 |   88 |      90 |
|  2 | Liming  |      57 |   58 |      70 |
|  3 | Zhaolao |      66 |   80 |      47 |
|  4 | Wu      |      76 |   70 |      47 |
|  5 | Wuqi    |      88 |   43 |      80 |
|  6 | Liqiang |      89 |   92 |      90 |
|  7 | Qinsu   |      90 |   74 |      67 |
|  8 | Zhaoli  |      54 |   74 |     100 |
+----+---------+---------+------+---------+

指定列查询 📨

指定列查询,顾名思义就是指定对应的字段进行查询;

语句:SELECT 字段1,字段2... FROM table_name;

示例:

mysql> select name,chinese from Point;
+---------+---------+
| name    | chinese |
+---------+---------+
| Lihua   |      67 |
| Liming  |      57 |
| Zhaolao |      66 |
| Wu      |      76 |
| Wuqi    |      88 |
| Liqiang |      89 |
| Qinsu   |      90 |
| Zhaoli  |      54 |
+---------+---------+

查询字段为表达式 📨

SELECT不仅能查询表中的字段,也能查询表达式;

示例:

mysql> select name,chinese,6 from Point;
+---------+---------+---+
| name    | chinese | 6 |
+---------+---------+---+
| Lihua   |      67 | 6 |
| Liming  |      57 | 6 |
| Zhaolao |      66 | 6 |
| Wu      |      76 | 6 |
| Wuqi    |      88 | 6 |
| Liqiang |      89 | 6 |
| Qinsu   |      90 | 6 |
| Zhaoli  |      54 | 6 |
+---------+---------+---+

在该次查询中查询的除了字段以外还查询了一个常量表达式;


查询结果取别名 📨

当一个查询的字段由一个较为复杂的表达式合成时,可以将该表达式使用as将其改名;

需要注意的是,在SELECT查询为结果的字段进行改名时,这个操作一般是靠后的,即将数据处理完后将其打印时才能将其进行改名,所以不能先进行改名再将其进行其他操作;

示例:

mysql> select name,chinese+math+english as '总分' from Point;
+---------+--------+
| name    | 总分   |
+---------+--------+
| Lihua   |    245 |
| Liming  |    185 |
| Zhaolao |    193 |
| Wu      |    193 |
| Wuqi    |    211 |
| Liqiang |    271 |
| Qinsu   |    231 |
| Zhaoli  |    228 |
+---------+--------+

其中这里的as可以省略不写;


去重 📨

这里的去重指的是对最终的结果在显示前进行去重;

其语法即为SELECT DISTINCT 字段 FROM table_name;

mysql> select math from Point; # 未使用去重
+------+
| math |
+------+
|   88 |
|   58 |
|   80 |
|   70 |
|   43 |
|   92 |
|   74 |
|   74 |
+------+
mysql> select distinct math from Point; # 结果去重
+------+
| math |
+------+
|   88 |
|   58 |
|   80 |
|   70 |
|   43 |
|   92 |
|   74 |
+------+

📌where条件📌

在大部分的情况下,SELECT在查询数据时应该配合着行的限制与列的限制从而达到筛选数据的效果;

若是不对数据进行筛选而是无脑选择SELECT * FROM table_name;来将数据进行全部显示的话可能会因为数据量过于庞大不便于观察且并没有筛选出需要条件的数据而做出的无用查看;

在MySQL中可以使用where条件来为SELECT查看的数据做出对应的条件限制从而达到能够查看到对应的数据;

同样的接下来的操作将基于上表进行;


📌比较运算符📌

  • > , >= , < , <=
    若是满足条件则显示1,否则显示0;
mysql> select 1>2;
+-----+
| 1>2 |
+-----+
|   0 |
+-----+
1 row in set (0.00 sec)
mysql> select 1<2;
+-----+
| 1<2 |
+-----+
|   1 |
+-----+
1 row in set (0.00 sec)
  • 示例:
    显示出math大于90的人的名字与成绩
mysql> select name,math from Point where math>90;
+---------+------+
| name    | math |
+---------+------+
| Liqiang |   92 |
+---------+------+

  • =<=>
    在MySQL中的等于有两种,分别为以上两种;
    两种的等于在实质性的使用层面并没有太多的区别;
    唯一的区别只是对NULL进行判断;
#--------------------------------------
mysql> select 1 = 1;
+-------+
| 1 = 1 |
+-------+
|     1 |
+-------+
mysql> select 1 = 2;
+-------+
| 1 = 2 |
+-------+
|     0 |
+-------+
mysql> select NULL = NULL;
+-------------+
| NULL = NULL |
+-------------+
|        NULL |
+-------------+
#--------------------------------------
mysql> select 1<=>1;
+-------+
| 1<=>1 |
+-------+
|     1 |
+-------+
mysql> select 1<=>2;
+-------+
| 1<=>2 |
+-------+
|     0 |
+-------+
mysql> select NULL<=>NULL;
+-------------+
| NULL<=>NULL |
+-------------+
|           1 |
+-------------+
#--------------------------------------

  • 不等于 !=<>
    在MySQL中的不等于为以上两种,但是无论哪种不等于都无法对NULL做比较;
mysql> select NULL <> NULL;
+--------------+
| NULL <> NULL |
+--------------+
|         NULL |
+--------------+
1 row in set (0.00 sec)
mysql> select NULL = NULL;
+-------------+
| NULL = NULL |
+-------------+
|        NULL |
+-------------+
1 row in set (0.00 sec)

  • 范围匹配BETWEEN a0 AND a1
    范围匹配一般用来判断一个数是否属于该范围内,且该范围属于左闭右闭区间([a0,a1]);
mysql> select 5 between 0 and 10;
+--------------------+
| 5 between 0 and 10 |
+--------------------+
|                  1 |
+--------------------+
1 row in set (0.00 sec)
  • 示例:找出math区间为[70,75]的数据:
mysql> select name,math from Point where math between 70 and 75;
+--------+------+
| name   | math |
+--------+------+
| Wu     |   70 |
| Qinsu  |   74 |
| Zhaoli |   74 |
+--------+------+

  • 该数据是否为一组数据中的其中一个IN (option,...)
    该运算符一般判断一个数据是否存在于一组数据中;
mysql> select 12 in (10,12,14);
+------------------+
| 12 in (10,12,14) |
+------------------+
|                1 |
+------------------+
1 row in set (0.00 sec)
  • 示例:分别找出english为(70,80,90,100)的数据;
mysql> select name,english from Point where english in (70,80,90,100);
+---------+---------+
| name    | english |
+---------+---------+
| Lihua   |      90 |
| Liming  |      70 |
| Wuqi    |      80 |
| Liqiang |      90 |
| Zhaoli  |     100 |
+---------+---------+
5 rows in set (0.00 sec)

  • 是NULL IS NULL 与 非NULL IS NOT NULL
    该运算符一般用来判断一个字段是否为NULL;
mysql> select NULL IS NULL;
+--------------+
| NULL IS NULL |
+--------------+
|            1 |
+--------------+
1 row in set (0.00 sec)
mysql> select NULL IS NOT  NULL;
+-------------------+
| NULL IS NOT  NULL |
+-------------------+
|                 0 |
+-------------------+
1 row in set (0.00 sec)

  • 模糊匹配LIKE
    该运算符一般用来模糊匹配,其中%表示多个(包括0)个任意字符,_表示任意一个字符;
    示例:分别找出name为W的字段与W_ 的字段;
mysql> select * from Point where name like 'W%';
+----+------+---------+------+---------+
| id | name | chinese | math | english |
+----+------+---------+------+---------+
|  4 | Wu   |      76 |   70 |      47 |
|  5 | Wuqi |      88 |   43 |      80 |
+----+------+---------+------+---------+
mysql> select * from Point where name like 'W_';
+----+------+---------+------+---------+
| id | name | chinese | math | english |
+----+------+---------+------+---------+
|  4 | Wu   |      76 |   70 |      47 |
+----+------+---------+------+---------+

📌逻辑运算符📌

运算符 说明
AND 多个条件为TRUE(1)时结果为TRUE(1);
OR 任意一个条件为TRUE(1)时结果为TRUE(1);
NOT 条件为TRUE(1)时结果为FALSE(0);

📌结果排序📌

结果排序可以将数据再处理完时对其进行排序处理(一般该操作的顺序为最后的操作);

且没有进行ORDER BY子句的查询所返回的结果顺序一般都是未定义的,即不可靠的;

语法:

SELECT ... FROM table_name [ WHERE ... ]
  ORDER BY column [ASC|DESC],[...];
  #其中:
  #ASC为升序,DESC为降序;
  #默认为ASC升序;

示例:

显示namemath的字段且math为升序的条件显示;

mysql> select name,math from Point order by math ASC;
+---------+------+
| name    | math |
+---------+------+
| Wuqi    |   43 |
| Liming  |   58 |
| Wu      |   70 |
| Qinsu   |   74 |
| Zhaoli  |   74 |
| Zhaolao |   80 |
| Lihua   |   88 |
| Liqiang |   92 |
+---------+------+
8 rows in set (0.00 sec)

📌筛选分页结果📌

在MySQL中经常会因为数据量过大而导致不便于数据的观察;

而在MySQL中有这么一条语句可以便于结果的观察,即为筛选分页结果;

语法:

#分页时的起始下标为0;
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从起始下标开始筛选n条结果;
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s,n;
-- 从s开始,筛选n条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
-- 从s开始,筛选n条结果(该方法的表达更为明确)

示例:

查看namemath字段并使用order by以降序的方式进行排序最终结果每页显示3条;

mysql> SELECT name,math from Point order by math desc limit 3 offset 0;
+---------+------+
| name    | math |
+---------+------+
| Liqiang |   92 |
| Lihua   |   88 |
| Zhaolao |   80 |
+---------+------+
3 rows in set (0.01 sec)
mysql> SELECT name,math from Point order by math desc limit 3 offset 3;
+--------+------+
| name   | math |
+--------+------+
| Qinsu  |   74 |
| Zhaoli |   74 |
| Wu     |   70 |
+--------+------+
3 rows in set (0.00 sec)
mysql> SELECT name,math from Point order by math desc limit 3 offset 6;
+--------+------+
| name   | math |
+--------+------+
| Liming |   58 |
| Wuqi   |   43 |
+--------+------+
2 rows in set (0.00 sec)


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
|
24天前
|
存储 监控 数据处理
flink 向doris 数据库写入数据时出现背压如何排查?
本文介绍了如何确定和解决Flink任务向Doris数据库写入数据时遇到的背压问题。首先通过Flink Web UI和性能指标监控识别背压,然后从Doris数据库性能、网络连接稳定性、Flink任务数据处理逻辑及资源配置等方面排查原因,并通过分析相关日志进一步定位问题。
155 61
|
2天前
|
SQL 关系型数据库 MySQL
MySQL 窗口函数详解:分析性查询的强大工具
MySQL 窗口函数从 8.0 版本开始支持,提供了一种灵活的方式处理 SQL 查询中的数据。无需分组即可对行集进行分析,常用于计算排名、累计和、移动平均值等。基本语法包括 `function_name([arguments]) OVER ([PARTITION BY columns] [ORDER BY columns] [frame_clause])`,常见函数有 `ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`, `SUM()`, `AVG()` 等。窗口框架定义了计算聚合值时应包含的行。适用于复杂数据操作和分析报告。
32 11
|
5天前
|
存储 关系型数据库 MySQL
mysql怎么查询longblob类型数据的大小
通过本文的介绍,希望您能深入理解如何查询MySQL中 `LONG BLOB`类型数据的大小,并结合优化技术提升查询性能,以满足实际业务需求。
33 6
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
137 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
15天前
|
存储 缓存 网络协议
数据库执行查询请求的过程?
客户端发起TCP连接请求,服务端通过连接器验证主机信息、用户名及密码,验证通过后创建专用进程处理交互。服务端进程缓存以减少创建和销毁线程的开销。后续步骤包括缓存查询(8.0版后移除)、语法解析、查询优化及存储引擎调用,最终返回查询结果。
26 6
|
17天前
|
SQL 关系型数据库 MySQL
mysql分页读取数据重复问题
在服务端开发中,与MySQL数据库进行数据交互时,常因数据量大、网络延迟等因素需分页读取数据。文章介绍了使用`limit`和`offset`参数实现分页的方法,并针对分页过程中可能出现的数据重复问题进行了详细分析,提出了利用时间戳或确保排序规则绝对性等解决方案。
|
22天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
1月前
|
缓存 NoSQL 关系型数据库
Redis和Mysql如何保证数据⼀致?
在项目中,为了解决Redis与Mysql的数据一致性问题,我们采用了多种策略:对于低一致性要求的数据,不做特别处理;时效性数据通过设置缓存过期时间来减少不一致风险;高一致性但时效性要求不高的数据,利用MQ异步同步确保最终一致性;而对一致性和时效性都有高要求的数据,则采用分布式事务(如Seata TCC模式)来保障。
61 14
|
1月前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
60 9