MySQL之select、distinct、limit的使用
作者:李子捌 发布时间:2024-01-22 04:41:20
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
接着使用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;
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)
来源:https://juejin.cn/post/7028741334898835464


猜你喜欢
- 合并在numpy中合并两个arraynumpy中可以通过concatenate,参数axis=0表示在垂直方向上合并两个数组,等价于np.v
- vue项目页面空白但不报错产生的原因分析vue项目中我们请求一个路由,打开页面发现页面是空白的,产生的主要原因有四种:1.路由重复如果配置了
- 前言你是否曾经想将某张照片中的人物抠出来,然后拼接到其他图片上去,从而可以即使你在天涯海角,我也可以到此一游?专业点的人使用 PhotoSh
- 有时需要根据项目的实际需求向spider传递参数以控制spider的行为,比如说,根据用户提交的url来控制spider爬取的网站。在这种情
- python中的列表和元组# 1.列表的格式# [数据1,数据2,数据3,···]# 列表 可变数据类型# 列表可以存储多个数据,数据之间的
- 可用下列代码实现:<% set conn=server.creatobject("ADODB
- 前言:为了获取一定高级操作,如:微信模板消息(xiao,xin)推送,把消息推送给用户,或者是获取用户授权信息都需要用到access tok
- 项目中遇到图片实际显示尺寸的判定问题,图片可能被缩放过,所以实际显示的宽高无法通过常见的各种width,height拿到(都是得到图像的自然
- python中的集合什么是集合?集合是一个无序的不重复元素序列常用来对两个列表进行交并差的处理集合与列表一样,支持所有数据类型集合与列表的区
- 在 Time 包中,定义有一个名为 Duration 的类型和一些辅助的常量:type Duration int64const ( Nano
- 表单验证是WEB开发中经常遇到的问题,我们以前常见的做法是:在客户端对表单域进行内容的检查,看是否是满足一定的要求或满足一定的结构,比如:是
- 1.字符串反转使用Python切片反转字符串:# Reversing a string using slicingmy_string = &
- python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指
- 一、前言本文讲述的是1元1次方程,1元2次方程的python解法。只用给出一般形式的系数和常数,自动给出方程的解。还附带函数解析。二、1元1
- 新项目,准备引用bootstrap-table这个控件来展示页面上的表格,无奈这款控件的分页工具栏没有跳转到xx页的功能,为了适应公司美工(
- 概述今天我们要来做一个进阶的花分类问题. 不同于之前做过的鸢尾花, 这次我们会分析 102 中不同的花. 是不是很上头呀.预处理导包常规操作
- 阅读上一章:Chapter 9 精简标签Part 2: Simplebits Of Style 简短精悍的样式Chap
- 前言: 经过前面文章学习,我们知道 binlog 会记录数据库所有执行的 DDL 和 DML 语句(除了数据查询语句select、
- MySQL安装分为安装版和解压版,安装版主要是由一个exe程序式安装,有界面鼠标点击安装即可,小白建议使用安装版安装mysql,相比较与安装
- 一、一站式解决 1. 问题分析定位# 找到MySQL的配置文件,复制mysql的数据目录vim /etc/my.cnf# 进入ms