「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战」
1、简介
这篇博客将会非常基础,如果有MySQL经验的可以跳过,写这篇博客的原因是给初学者看的。下面将会讲解如何使用select查看指定表的单个列、多个列以及全部列。
首先准备一张表,表结构如下所示:
1 | sql复制代码SET NAMES utf8mb4; |
表数据如下所示:
1 | sql复制代码INSERT INTO `user` VALUES (1, '李子捌', 18, 1); |
注意在MySQL4.1之后,数据库关键字是完全不区分大小写;数据库名、表名、列名默认不区分大小写,但是可以修改(不建议修改)。
2、select
2.1 查询单个列
首先使用use指定需要操作的数据库。
1 | ini复制代码mysql> use liziba; |
接着使用select从user表中查询name列,select紧跟着列名称,from后面紧跟着表名称。
select column_name from table_name;
1 | sql复制代码mysql> select name from user; |
2.2 查询多个列
查询多个列和单个列的区别在于,select后面紧跟多个列名,用英文逗号分割即可。
select column_name1,column_name2,column_name3 from table_name;
1 | sql复制代码mysql> select name,age from user; |
2.3 查询所有列
查询所有列有两种方式,第一种是上面两种推导出的方式,列出所有的列名。
1 | sql复制代码mysql> select id,name,age,sex from user; |
第二种,也是部分程序员使用的最多的一句SQL,使用 *** 通配符**代替表的所有列。
select * from table_name;
1 | sql复制代码mysql> select * from user; |
提示:*是程序员使用的大忌, 如果我们不需要获取表的所有列且表的列名是移植的,就不应该使用*查询全部数据,而是应该指定数据库列查询,这样可以提升查询的性能。
3、distinct
如果需要查询列值不重复的数据,可以使用distinct关键字去重。
我们在上面的表中插入一条新的数据,数据age和李子捌相等,sex也相同。
1 | sql复制代码mysql> insert into user (name, age, sex) values('谢礼', 18, 1); |
此时可以看到年龄列有相等的值
1 | sql复制代码mysql> select * from user; |
此时我们想获取user表中的用户有哪些年龄。我们可以使用distinct关键字,应用于需要去重的列前面。
1 | sql复制代码mysql> select distinct age from user; |
这里有一个问题需要注意, distinct关键字去重会作用于所有的字段,如果distinct关键字后面跟了多个字段,那么多个字段的值都不相等才算不重复。
比如说user表中不存在age,name同时都不重复的数据,此时distinct关键字并不是没生效,而是本身就不存在。
1 | sql复制代码mysql> select distinct age,name from user; |
如果distinct关键字后跟的字段值都不相等,那么distinct关键字仍然能去重。比如李子捌和谢礼的年龄和性别均相等,此时distinct关键字会过滤一条数据。
1 | sql复制代码mysql> select distinct age,sex from user; |
4、limit
前面的查询会返回满足条件的所有记录,如果我们只需要指定数量的记录,可以使用limit关键字限制返回的行;这种场景多用于数据分页。
limit的取值需大于等于0的整数 ,如果传入负数和小数会报错。
1 | sql复制代码mysql> select * from user limit 0; |
如果limit给定的值大于表的行记录值,那么将会返回所有数据。比如我们通过select count(1)查询user表的记录数值,一共7条数据,此时我们传入8,并不会报错,MySQL将会放回user表中的所有数据。
1 | sql复制代码mysql> select count(1) from user; |
limit可以跟两个参数分别表示起始值和结束值,闭区间(包含起始值和结束值)。如果跟一个参数,则表示结束值,起始值默认为0。 注意MySQL数据的索引起始值为0。
limit 2, 4表示查询第三条数据到第五条数据,其行号为2到4。
1 | sql复制代码mysql> select * from user limit 2, 4; |
本文转载自: 掘金