本文主要说明如何在MySQL中使用select、distinct和limit。本文的解释简单明了,易学易懂。现在请跟随边肖的思路,一起学习和学习如何在MySQL中使用select、distinct和limit!
1、简介
这个博客会很基础。如果你有MySQL的经验,可以跳过。写这个博客的原因是为了初学者。下面将解释如何使用select查看指定表的单列、多列和所有列。
首先准备一张表,表结构如下所示:
SETNAMESutf8mb4
SETFOREIGN _ KEY _ CHECKS=0;
-
-用户的表结构
-
DROPTABLEIFEXISTS`user `;
CREATETABLE`user `(
` id`bigint (20)不为null auto _ incremental注释'主键',
` name`varchar (255)非空注释'用户名',
年龄` int(11)NOTNULLCOMMENT '年龄',
` sex`smallish (6)非空注释' gender ',
PRIMARYKEY(`id `)
)ENGINE=innodabout _ INCREMENT=7DEFAULTCHARSET=utf8;表数据如下所示:
INSERTINTO`user`VALUES(1,' plum ',18,1);
INSERTINTO`user`VALUES(2,'张三',22,1);
INSERTINTO`user`VALUES(3,'李四',38,1);
插入“用户”值(4,‘王五’,25,1);
INSERTINTO`user`VALUES(5,'六麻子',13,0);
INSERTINTO`user`VALUES(6,'天齐',37,1);
SETFOREIGN _ KEY _ CHECKS=1;注意,在MySQL4.1之后,数据库关键字完全不区分大小写;默认情况下,数据库名、表名和列名不区分大小写,但可以修改(不建议修改)。
00-1010
2、select
首先使用指定要操作的数据库。
mysqluseliziba
Databasechanged然后使用select查询用户表中的name列,然后是列名,最后是来自的表名。
select column _ name from table _ name;
mysqlselectnamefromuser
-
+
| 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这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/80632.html