各位用户为了找寻关于MySQL之select、distinct、limit的使用的资料费劲了很多周折。这里教程网为您整理了关于MySQL之select、distinct、limit的使用的相关资料,仅供查阅,以下为您介绍关于MySQL之select、distinct、limit的使用的详细内容
目录
1、简介 2、select 2.1 查询单个列 2.2 查询多个列 2.3 查询所有列 3、distinct 4、limit
1、简介
这篇博客将会非常基础,如果有MySQL
经验的可以跳过,写这篇博客的原因是给初学者看的。下面将会讲解如何使用select查看指定表的单个列、多个列以及全部列。
首先准备一张表,表结构如下所示:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14SET
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;
表数据如下所示:
? 1 2 3 4 5 6 7 8INSERT
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
接着使用select
从user
表中查询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;
? 1 2 3 4 5 6 7 8 9 10 11 12mysql>
select
name
,age
from
user
;
+
--------+-----+
|
name
| age |
+
--------+-----+
| 李子捌 | 18 |
| 张三 | 22 |
| 李四 | 38 |
| 王五 | 25 |
| 六麻子 | 13 |
| 田七 | 37 |
+
--------+-----+
6
rows
in
set
(0.00 sec)
2.3 查询所有列
查询所有列有两种方式,第一种是上面两种推导出的方式,列出所有的列名。
? 1 2 3 4 5 6 7 8 9 10 11 12mysql>
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;
? 1 2 3 4 5 6 7 8 9 10 11 12mysql>
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)
此时可以看到年龄列有相等的值
? 1 2 3 4 5 6 7 8 9 10 11 12 13mysql>
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://juejin.cn/post/7028741334898835464