MySQL 之简单查询

在日常的开发工作中,查询语句也是最常用的,因为表在一开始设计的时候已经确定了,后期很少去修改表结构,也就意味着插入数据的方式也是确定的,但数据的展示方式却千奇百怪,用户端和 admin 管理端可能需要各种各样的数据,那 MySQL 就要提供最接近需求的数据,这样可以节省 Java 程序对数据的转换处理,也就相应提升了程序的性能。

如何提供最接近需求的数据呢?这就要靠 SELECT 语句了。

查询单个字段

格式:

SELECT 字段名 FROM 表名;

比如说,我们想要查看 article 表的 title 字段,那查询语句就是:

SELECT title FROM article;

执行这条语句后,我们可以看到下面这些数据。

别名

如果你想要给查询出来的字段起一个别名,可以使用 AS 关键字,格式如下所示:

SELECT 字段名 AS 别名 FROM 表名;

比如说,我们想要给 title 字段起一个别名叫做 文章标题,那查询语句就是:

SELECT title AS '文章标题' FROM article;

这通常会在多表进行联合查询或者 Java 程序端和 MySQL 表字段不一致时使用。

比如说,Java 程序端的字段名是 articleTitle,那我们就可以使用别名来解决这个问题。

SELECT title AS articleTitle FROM article;

查询多个字段

当结果集中需要多个字段时,可以使用逗号 , 分隔字段进行查询,格式如下所示:

SELECT 字段1, 字段2, 字段3 FROM 表名;

比如说,我们想要查看 article 表的 title、user_id、create_time 字段,那查询语句就是:

SELECT title, user_id, create_time FROM article;

查询所有字段

当结果集中需要查询所有字段时,可以使用 * 通配符进行查询,格式如下所示:

SELECT * FROM 表名;

比如说,我们想要查看 article 表的所有字段,那查询语句就是:

SELECT * FROM article;

由于某些字段的内容较多,我们可以使用 \G 来查看结果集。

说到 * 通配符,就必须得提一嘴 SELECT COUNT(*) 和 SELECT COUNT(字段名),以及 SELECT COUNT(1),是面试中经常考察的一个知识点。

当然了,并不建议使用 * 通配符,因为这样会导致查询出来的字段过多,而且不利于程序的性能优化,尽量按需查询字段,就是当前需要什么字段就查询什么字段,不够用的话,再添加字段。

从根源上减轻数据传输的负载,是我们在编写代码时应该遵守的好习惯。

查询结果去重

当结果集中需要去重时,可以使用 DISTINCT 关键字进行查询,格式如下所示:

SELECT DISTINCT 字段名 FROM 表名;

比如说,我们想要查看 tag 表的所有标签,那查询语句就是:

SELECT DISTINCT tag_name FROM tag;

查询结果排序

当结果集中需要排序时,可以使用 ORDER BY 关键字进行查询,格式如下所示:

SELECT 字段名 FROM 表名 ORDER BY 字段名 [ASC|DESC];

ASC 是升序,DESC 是降序,默认是升序。

比如说,我们想要查看 article 表的 title 字段,并按照 create_time 字段进行降序排序,那查询语句就是:

SELECT title,create_time FROM article ORDER BY create_time DESC;

如果需要按照多个字段排序,可以使用逗号 , 分隔字段进行排序。


SELECT 字段1, 字段2 FROM 表名 ORDER BY 字段1 [ASC|DESC], 字段2 [ASC|DESC];

比如说,我们想要查看 article 表的 title 字段,并按照 create_time 字段进行降序排序,如果 create_time 字段相同的话,再按照 update_time 字段进行升序排序,那查询语句就是:

SELECT title,create_time,update_time FROM article ORDER BY create_time DESC, update_time ASC;

查询结果限制条数

当结果集中需要限制返回的行数时,可以使用 LIMIT 关键字进行查询,格式如下所示:

SELECT 字段名 FROM 表名 LIMIT 开始行,行数;

开始行也叫偏移量(OFFSET),默认是 0,可以缺省。

比如说,我们想要查看 article 表的 title 字段,并限制返回 5 条数据,那查询语句就是:


SELECT title FROM article LIMIT 5;

LIMIT 对于分页查询非常有用,比如说,我们想要查看 article 表的 title 字段,并限制返回 5 条数据,从第 6 条数据开始,那查询语句就是:

SELECT title FROM article LIMIT 5,5;

开始行为 5 是因为数据集在计数的时候是以 0 开始的。

不过,使用 LIMIT 和大偏移量(OFFSET)进行分页时,MySQL 需要读取从开始到偏移量指定的行数的所有数据,然后丢弃前面所有的行,只返回指定范围内的数据。这意味着,随着 OFFSET 值的增加,性能会逐渐下降。对于大数据量的表,这会导致查询变得非常慢。

小结

今天我们学习了 MySQL 的简单查询,主要包括了查询单个字段、查询多个字段、查询所有字段、查询结果去重、查询结果排序、查询结果限制条数。

虽然很基础,但留了两个需要深度探讨的知识点,一个是 COUNT(*)、COUNT(字段名)、COUNT(1) 之间的区别,另一个是 LIMIT OFFSET 性能逐渐下降的原因。

这些简单查询在日常开发中其实已经不需要我们手动去实现了,因为有很多持久层框架会帮我们做这些事情。

比如说,技术派当中就使用了 MyBatis-Plus 框架,它提供了很多便捷的查询方法,比如说 selectById、selectList、selectPage 等等,这些方法都是基于 SELECT 语句的封装。

大家如果对 MyBatis-Plus 的源码感兴趣的话,可以研究一下它的 selectById 方法,看看它是如何封装 SELECT 语句的。

虽然有持久层框架的帮助,但我们还是需要掌握 SQL 语句的基本用法,因为有些复杂的查询,持久层框架可能无法满足我们的需求,这时候就需要我们手动编写

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值