我们在上面的表中插入一条新的数据,数据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使用内容请搜索
更多相关Mysql内容来自木庄网络博客
标签:Mysql
相关阅读 >>
mysql数据库在centos系统下如何被彻底删除的步骤介绍
mysql5.7导出数据提示--secure-file-priv选项问题的解决方法
更多相关阅读请进入《mysql》频道 >>
数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。