文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么使用MySQL中的select、distinct、limit

2023-06-25 14:29

关注

这篇文章主要讲解了“怎么使用MySQL中的select、distinct、limit”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用MySQL中的select、distinct、limit”吧!

1、简介

这篇博客将会非常基础,如果有MySQL经验的可以跳过,写这篇博客的原因是给初学者看的。下面将会讲解如何使用select查看指定表的单个列、多个列以及全部列。

首先准备一张表,表结构如下所示:

SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',  `name` varchar(255) NOT NULL COMMENT '用户名',  `age` int(11) NOT NULL COMMENT '年龄',  `sex` smallint(6) NOT NULL COMMENT '性别',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

表数据如下所示:

INSERT INTO `user` VALUES (1, '李子捌', 18, 1);INSERT INTO `user` VALUES (2, '张三', 22, 1);INSERT INTO `user` VALUES (3, '李四', 38, 1);INSERT INTO `user` VALUES (4, '王五', 25, 1);INSERT INTO `user` VALUES (5, '六麻子', 13, 0);INSERT INTO `user` VALUES (6, '田七', 37, 1);SET FOREIGN_KEY_CHECKS = 1;

注意在MySQL4.1之后,数据库关键字是完全不区分大小写;数据库名、表名、列名默认不区分大小写,但是可以修改(不建议修改)。

2、select

2.1 查询单个列

首先使用use指定需要操作的数据库。

mysql> use liziba;Database changed

接着使用selectuser表中查询name列,select紧跟着列名称,from后面紧跟着表名称。

select column_name from table_name;mysql> select name from user;+--------+| name   |+--------+| 李子捌 || 张三   || 李四   || 王五   || 六麻子 || 田七   |+--------+6 rows in set (0.00 sec)

2.2 查询多个列

查询多个列和单个列的区别在于,select后面紧跟多个列名,用英文逗号分割即可。

select column_name1,column_name2,column_name3 from table_name;

mysql> select name,age from user;+--------+-----+| name   | age |+--------+-----+| 李子捌 |  18 || 张三   |  22 || 李四   |  38 || 王五   |  25 || 六麻子 |  13 || 田七   |  37 |+--------+-----+6 rows in set (0.00 sec)

2.3 查询所有列

查询所有列有两种方式,第一种是上面两种推导出的方式,列出所有的列名。

mysql> select id,name,age,sex from user;+----+--------+-----+-----+| id | name   | age | sex |+----+--------+-----+-----+|  1 | 李子捌 |  18 |   1 ||  2 | 张三   |  22 |   1 ||  3 | 李四   |  38 |   1 ||  4 | 王五   |  25 |   1 ||  5 | 六麻子 |  13 |   0 ||  6 | 田七   |  37 |   1 |+----+--------+-----+-----+6 rows in set (0.00 sec)

第二种,也是部分程序员使用的最多的一句SQL,使用 *** 通配符**代替表的所有列。

select * from table_name;

mysql> select * from user;+----+--------+-----+-----+| id | name   | age | sex |+----+--------+-----+-----+|  1 | 李子捌 |  18 |   1 ||  2 | 张三   |  22 |   1 ||  3 | 李四   |  38 |   1 ||  4 | 王五   |  25 |   1 ||  5 | 六麻子 |  13 |   0 ||  6 | 田七   |  37 |   1 |+----+--------+-----+-----+6 rows in set (0.00 sec)

提示:是程序员使用的大忌, 如果我们不需要获取表的所有列且表的列名是移植的,就不应该使用查询全部数据,而是应该指定数据库列查询,这样可以提升查询的性能。

3、distinct

如果需要查询列值不重复的数据,可以使用distinct关键字去重。

我们在上面的表中插入一条新的数据,数据age和李子捌相等,sex也相同。

mysql> insert into user (name, age, sex) values('谢礼', 18, 1);Query OK, 1 row affected (0.01 sec)

此时可以看到年龄列有相等的值

mysql> select * from user;+----+--------+-----+-----+| id | name   | age | sex |+----+--------+-----+-----+|  1 | 李子捌 |  18 |   1 ||  2 | 张三   |  22 |   1 ||  3 | 李四   |  38 |   1 ||  4 | 王五   |  25 |   1 ||  5 | 六麻子 |  13 |   0 ||  6 | 田七   |  37 |   1 ||  7 | 谢礼   |  18 |   1 |+----+--------+-----+-----+7 rows in set (0.00 sec)

此时我们想获取user表中的用户有哪些年龄。我们可以使用distinct关键字,应用于需要去重的列前面。

mysql> select distinct age from user;+-----+| age |+-----+|  18 ||  22 ||  38 ||  25 ||  13 ||  37 |+-----+6 rows in set (0.00 sec)

这里有一个问题需要注意distinct关键字去重会作用于所有的字段,如果distinct关键字后面跟了多个字段,那么多个字段的值都不相等才算不重复。

比如说user表中不存在age,name同时都不重复的数据,此时distinct关键字并不是没生效,而是本身就不存在。

mysql> select distinct age,name from user;+-----+--------+| age | name   |+-----+--------+|  18 | 李子捌 ||  22 | 张三   ||  38 | 李四   ||  25 | 王五   ||  13 | 六麻子 ||  37 | 田七   ||  18 | 谢礼   |+-----+--------+7 rows in set (0.00 sec)

如果distinct关键字后跟的字段值都不相等,那么distinct关键字仍然能去重。比如李子捌和谢礼的年龄和性别均相等,此时distinct关键字会过滤一条数据。

mysql> select distinct age,sex from user;+-----+-----+| age | sex |+-----+-----+|  18 |   1 ||  22 |   1 ||  38 |   1 ||  25 |   1 ||  13 |   0 ||  37 |   1 |+-----+-----+6 rows in set (0.00 sec)

4、limit

前面的查询会返回满足条件的所有记录,如果我们只需要指定数量的记录,可以使用limit关键字限制返回的行;这种场景多用于数据分页。

limit的取值需大于等于0的整数 ,如果传入负数和小数会报错。

mysql> select * from user limit 0;Empty set (0.00 sec)mysql> select * from user limit 1;+----+--------+-----+-----+| id | name   | age | sex |+----+--------+-----+-----+|  1 | 李子捌 |  18 |   1 |+----+--------+-----+-----+1 row in set (0.00 sec)

如果limit给定的值大于表的行记录值,那么将会返回所有数据。比如我们通过select count(1)查询user表的记录数值,一共7条数据,此时我们传入8,并不会报错,MySQL将会放回user表中的所有数据。

mysql> select count(1) from user;+----------+| count(1) |+----------+|        7 |+----------+1 row in set (0.01 sec)mysql> select * from user limit 8;+----+--------+-----+-----+| id | name   | age | sex |+----+--------+-----+-----+|  1 | 李子捌 |  18 |   1 ||  2 | 张三   |  22 |   1 ||  3 | 李四   |  38 |   1 ||  4 | 王五   |  25 |   1 ||  5 | 六麻子 |  13 |   0 ||  6 | 田七   |  37 |   1 ||  7 | 谢礼   |  18 |   1 |+----+--------+-----+-----+7 rows in set (0.00 sec)

limit可以跟两个参数分别表示起始值和结束值,闭区间(包含起始值和结束值)。如果跟一个参数,则表示结束值,起始值默认为0。 注意MySQL数据的索引起始值为0。

limit 2 , 4表示查询第三条数据到第五条数据,其行号为2到4。

mysql> select * from user limit 2, 4;+----+--------+-----+-----+| id | name   | age | sex |+----+--------+-----+-----+|  3 | 李四   |  38 |   1 ||  4 | 王五   |  25 |   1 ||  5 | 六麻子 |  13 |   0 ||  6 | 田七   |  37 |   1 |+----+--------+-----+-----+4 rows in set (0.00 sec)

感谢各位的阅读,以上就是“怎么使用MySQL中的select、distinct、limit”的内容了,经过本文的学习后,相信大家对怎么使用MySQL中的select、distinct、limit这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯