MySQL简单查询、过滤查询、分组查询、分页查询

1.1 前言

当我们想要在数据库里查询我们想要的数据的时候,我们应该确定查那张表,我想查的数据需要满足什么条件,是否所有的列我都需要,当你确定了这些信息的时候,再加上数据库的查询语法,我们就可以从一张表中获取到我们想要的数据,基本的DQL查询语法如下:

SELECT [DISTINCT]
*|列名1,列名2,...
FROM 表
[WHERE 条件];

这里我们先简单的解释一下上面的语法:

  1. SELECT:关键字表示你使用的查询语句
  2. [DISTINCT]:表示是否对查询的语句进行去重,可以不写,属于可选项
  3. *|列名1,... :表示需要显示的列,比如一个表有5个字段,如果我们这里写*则表示显示所有的字段,如果我们写出具体的列名,那查询结果就只会显示我们指定的列数据。
  4. FROM:关键字表示,我们要查那张表
  5. WHERE:表示我们要查符合哪些条件的语句,如果不写,则会显示表中所有数据。

1.2 简单查询

假设我们有一张关于手机商品的表,表的内容如下(数据仅为学习使用,并不代表真实数据):

+------+------------+---------+----------+
| m_id | m_name     | m_price | p_belong |
+------+------------+---------+----------+
|    1 | iphone6s   |    1700 | 苹果     |
|    2 | 小米Plus   |    1700 | 小米     |
|    3 | 小米6      |    2700 | 小米     |
|    4 | iphone12   |    5700 | 苹果     |
|    5 | 锤子T7     |    3700 | 锤子     |
|    6 | 华为P50    |    6700 | 华为     |
|    7 | 小米10     |    3700 | 小米     |
|    8 | vivo       |    2700 | vivo     |
+------+------------+---------+----------+

1.2.1 查询所有的产品数据

假如我们想查询这张表的所有数据,也就是最简单的SQL查询,示例代码如下:

mysql> select * from mobile;
+------+------------+---------+----------+
| m_id | m_name     | m_price | p_belong |
+------+------------+---------+----------+
|    1 | iphone6s   |    1700 | 苹果     |
|    2 | 小米Plus   |    1700 | 小米     |
|    3 | 小米6      |    2700 | 小米     |
|    4 | iphone12   |    5700 | 苹果     |
|    5 | 锤子T7     |    3700 | 锤子     |
|    6 | 华为P50    |    6700 | 华为     |
|    7 | 小米10     |    3700 | 小米     |
|    8 | vivo       |    2700 | vivo     |
+------+------------+---------+----------+
8 rows in set (0.00 sec)

1.2.2 查询商品的指定字段数据

我们这张表中有四个字段,但是我就像看下产品名称和价格,不想看到其他的字段信息,此时我们查询时可以指定的具体的列,示例代码如下:

mysql> select m_name,m_price from mobile;
+------------+---------+
| m_name     | m_price |
+------------+---------+
| iphone6s   |    1700 |
| 小米Plus   |    1700 |
| 小米6      |    2700 |
| iphone12   |    5700 |
| 锤子T7     |    3700 |
| 华为P50    |    6700 |
| 小米10     |    3700 |
| vivo       |    2700 |
+------------+---------+
8 rows in set (0.00 sec)

mysql> 

1.2.3 表别名和列别名

我们可以在查询的过程中,可能需要多次使用表名或列名,我们每次都写表的全名显得比较麻烦,这个时候我们可以为其写一个别名,之后就可以在语句中使用别名,这里我们由于简单查询的语句比较简单,体现不出来,就先了解一下语法,感受一下,示例代码如下:

mysql> select m_name as n,m_price as p from mobile as m;
+------------+------+
| n          | p    |
+------------+------+
| iphone6s   | 1700 |
| 小米Plus   | 1700 |
| 小米6      | 2700 |
| iphone12   | 5700 |
| 锤子T7     | 3700 |
| 华为P50    | 6700 |
| 小米10     | 3700 |
| vivo       | 2700 |
+------------+------+
8 rows in set (0.00 sec)

加别名只需要在表名或列名后面加上AS关键字后面接上别名即可,AS也可以省略不写,直接写别名。

1.2.4 去重查询

比如我们想看一下,这些手机分别都是那几家公司的,如果我们直接查询,由于有的厂商它有多个产品,那么它就会有重复的数据,能看,但是不友好,此时我们可以查询关键字对其进行去重,直接查询出结果,示例代码如下:

mysql> select distinct p_belong from mobile;
+----------+
| p_belong |
+----------+
| 苹果     |
| 小米     |
| 锤子     |
| 华为     |
| vivo     |
+----------+
5 rows in set (0.00 sec)

去重也可以对多个字段去重,但是要值得注意的是,如果是多个字段,那么要每个字段的值一样,才会去重,如果有一个字段值是不一致的,它是不会去重的。

1.2.5 在查询中进行运算

比如当有新的手机发布的时候,一般旧的产品都会降价,假设打九折,那我们想看看打九折后的价格多少,如何查询呢,示例代码如下:

mysql> select m_name 手机名称,m_price*0.9 九折后价格 from mobile as m;
+--------------+-----------------+
| 手机名称     | 九折后价格      |
+--------------+-----------------+
| iphone6s     |            1530 |
| 小米Plus     |            1530 |
| 小米6        |            2430 |
| iphone12     |            5130 |
| 锤子T7       |            3330 |
| 华为P50      |            6030 |
| 小米10       |            3330 |
| vivo         |            2430 |
+--------------+-----------------+
8 rows in set (0.00 sec)

mysql> 

1.3 条件查询

我们上面的查询都是查询的所有数据,但是如果我们想要查询价格大于2000的手机有哪些的时候,这个时候就需要添加上条件了,在SQL语法中支持丰富的查询条件,具体如下:

类别运算符描述
比较运算符>大于
<小于
>=大于等于
<=小于等于
<>不等于
!=不等于的第二种写法
BETWEEN…AND…符合某一区间的值,包含边界值
IN(值1,值2,…)符合在in列表值的记录
LIKE ‘%值%’模糊查询,在LIKE语句中:%表示0个或多个任意字符,同样的还有_,表示单个字符
IS NULL判断字段是否为空
IS NOT NULL判断字段是否不为空
逻辑运算符AND多个条件同时成立
OR多个条件只要成立一个即可
NOT

下面我们看一些示例,还是上面的mobile

示例1:比较运算符等于条件查询
比如我们不想查看表中的所有信息,我只想查询出小米6的信息,查询语句如下:

mysql> select * from mobile where m_name ='小米6';
+------+---------+---------+----------+
| m_id | m_name  | m_price | p_belong |
+------+---------+---------+----------+
|    3 | 小米6   |    2700 | 小米     |
+------+---------+---------+----------+
1 row in set (0.00 sec)

我们使用条件查询的时候,需要在表名后跟上where关键字,然后再接查询条件,我们上面查询了等于的条件。

示例2:比较运算符不等于条件查询
下面我们试一下不等于的条件,不等于有两种写法(!=<>),效果都一样,比如我们查询一下厂商不是苹果公司的信息,查询语句如下:

mysql> select * from mobile where p_belong !='苹果';
+------+------------+---------+----------+
| m_id | m_name     | m_price | p_belong |
+------+------------+---------+----------+
|    2 | 小米Plus   |    1700 | 小米     |
|    3 | 小米6      |    2700 | 小米     |
|    5 | 锤子T7     |    3700 | 锤子     |
|    6 | 华为P50    |    6700 | 华为     |
|    7 | 小米10     |    3700 | 小米     |
|    8 | vivo       |    2700 | vivo     |
+------+------------+---------+----------+
6 rows in set (0.00 sec)

mysql> select * from mobile where p_belong <>'苹果';
+------+------------+---------+----------+
| m_id | m_name     | m_price | p_belong |
+------+------------+---------+----------+
|    2 | 小米Plus   |    1700 | 小米     |
|    3 | 小米6      |    2700 | 小米     |
|    5 | 锤子T7     |    3700 | 锤子     |
|    6 | 华为P50    |    6700 | 华为     |
|    7 | 小米10     |    3700 | 小米     |
|    8 | vivo       |    2700 | vivo     |
+------+------------+---------+----------+
6 rows in set (0.00 sec)

示例3:比较运算符小于条件查询
假如小明的资金有限,只有3000块钱,此时他想看一下,有哪些手机的价格是在3000块以下的,此时我们就可以使用小于比较运算符查询,示例如下:

mysql> select * from mobile where m_price <3000;
+------+------------+---------+----------+
| m_id | m_name     | m_price | p_belong |
+------+------------+---------+----------+
|    1 | iphone6s   |    1700 | 苹果     |
|    2 | 小米Plus   |    1700 | 小米     |
|    3 | 小米6      |    2700 | 小米     |
|    8 | vivo       |    2700 | vivo     |
+------+------------+---------+----------+
4 rows in set (0.00 sec)

示例4:比较运算符 BETWEEN…AND… 条件查询
小明看了一下3000块以下的手机,很犹豫,恰好爷爷来看小明,又给了他2000块的零花钱,所以小明就想看看3000-5000块之前的手机信息有哪些,此时就可以通过BETWEEN...AND...条件来进行查询,示例如下:

mysql> select * from mobile where m_price between 3000 and 5000;
+------+----------+---------+----------+
| m_id | m_name   | m_price | p_belong |
+------+----------+---------+----------+
|    5 | 锤子T7   |    3700 | 锤子     |
|    7 | 小米10   |    3700 | 小米     |
+------+----------+---------+----------+
2 rows in set (0.00 sec)

值得注意的是,between 3000 and 5000,它是包括3000和5000,这两个边界值的。

示例4:逻辑运算符 AND的使用
我们上面说查询手机价格在3000和5000之间的手机信息,我们把信息拆分一下就是,手机的价格≥3000 并且 手机的价格≤5000,这个时候,除了可以使用between ... and ...,还可以使用逻辑运算符,示例代码如下:

mysql> select * from mobile where m_price >= 3000 and m_price <= 5000;
+------+----------+---------+----------+
| m_id | m_name   | m_price | p_belong |
+------+----------+---------+----------+
|    5 | 锤子T7   |    3700 | 锤子     |
|    7 | 小米10   |    3700 | 小米     |
+------+----------+---------+----------+
2 rows in set (0.00 sec)

示例5:比较运算符 IN 的使用
小明特别喜欢华为和小米手机,所以他只想在国产手机中选择,他想看看小米和华为手机的信息,此时我们就可以使用IN运算符,示例代码如下:

mysql> select * from mobile where p_belong in('小米','华为');
+------+------------+---------+----------+
| m_id | m_name     | m_price | p_belong |
+------+------------+---------+----------+
|    2 | 小米Plus   |    1700 | 小米     |
|    3 | 小米6      |    2700 | 小米     |
|    6 | 华为P50    |    6700 | 华为     |
|    7 | 小米10     |    3700 | 小米     |
+------+------------+---------+----------+
4 rows in set (0.00 sec)

示例6:比较运算符 LIKE 的使用
小明发现自己的名字有个字,对名字有一种特殊的情节,所以他就像看看哪些手机名字里有字,这个时候我们可以使用LIKE条件查询,我们也叫模糊查询,示例代码如下:

mysql> select * from mobile where m_name like '%小%';
+------+------------+---------+----------+
| m_id | m_name     | m_price | p_belong |
+------+------------+---------+----------+
|    2 | 小米Plus   |    1700 | 小米     |
|    3 | 小米6      |    2700 | 小米     |
|    7 | 小米10     |    3700 | 小米     |
+------+------------+---------+----------+
3 rows in set (0.00 sec)

1.4 排序查询

小明想看看目前所有的手机,但是要求价格从大到小排序,此时就需要使用到排序的语法,语法如下:

SELECT * 
	FROM 表名
	WHERE 条件
	ORDER BY 排序字段 [ASC]|DESC;

这里的ASC表示升序,可以不写,排序 默认的就是升序,DESC表示降序。

示例1:按照价格列升序排序

mysql> select * from mobile order by m_price asc;
+------+------------+---------+----------+
| m_id | m_name     | m_price | p_belong |
+------+------------+---------+----------+
|    9 | iPhone20   |    NULL | 苹果     |
|    1 | iphone6s   |    1700 | 苹果     |
|    2 | 小米Plus   |    1700 | 小米     |
|    3 | 小米6      |    2700 | 小米     |
|    8 | vivo       |    2700 | vivo     |
|    5 | 锤子T7     |    3700 | 锤子     |
|    7 | 小米10     |    3700 | 小米     |
|    4 | iphone12   |    5700 | 苹果     |
|    6 | 华为P50    |    6700 | 华为     |
+------+------------+---------+----------+
9 rows in set (0.02 sec)
mysql> 

示例2:根据多个字段排序
我们上面排序的时候,只按照了价格排序,我们可以指定多个列排序,比如我们希望先按照手机价格的升序来排序,但是如果手机的价格一样的话,我们就按照手机的序号的降序来排序,下面我们看一下示例代码:

mysql> select * from mobile order by m_price asc,m_id desc;
+------+------------+---------+----------+
| m_id | m_name     | m_price | p_belong |
+------+------------+---------+----------+
|    9 | iPhone20   |    NULL | 苹果     |
|    2 | 小米Plus   |    1700 | 小米     |
|    1 | iphone6s   |    1700 | 苹果     |
|    8 | vivo       |    2700 | vivo     |
|    3 | 小米6      |    2700 | 小米     |
|    7 | 小米10     |    3700 | 小米     |
|    5 | 锤子T7     |    3700 | 锤子     |
|    4 | iphone12   |    5700 | 苹果     |
|    6 | 华为P50    |    6700 | 华为     |
+------+------------+---------+----------+
9 rows in set (0.00 sec)

1.5 聚合查询

在MySQL中,提供了一些计算的函数,比如求和、求平均数、求最大值等,而这些函数呢,又被称为聚合函数,常用的聚合函数如下:

聚合函数作用
count()统计指定列不为NULL的行数
sum()计算指定列的数值和,如果指定列的类型不是数值类型,则计算结果为0
max()计算指定列的最大值
min()计算指定列的最小值
avg()计算指定列的平均值

示例1:查询某张表的总行数

mysql> select count(*) from mobile;
+----------+
| count(*) |
+----------+
|        9 |
+----------+
1 row in set (0.01 sec)
mysql> 

这里我们要值得注意的是,如果你统计的列中有NULL值,那么统计的不是所有记录的总行数,因为count是不统计NULL值的。

示例2:求手机表中所有手机价格总和
小明现在发家致富了,有钱了,不做选择了,所有的手机都要,让老板给算个价格,示例代码如下:

mysql> select sum(m_price) from mobile where m_price !='NULL';
+--------------+
| sum(m_price) |
+--------------+
|        28600 |
+--------------+
1 row in set, 1 warning (0.00 sec)

示例3:求所有手机中价格最贵和最便宜的手机价格是多少

mysql> select max(m_price),min(m_price) from mobile;
+--------------+--------------+
| max(m_price) | min(m_price) |
+--------------+--------------+
|         6700 |         1700 |
+--------------+--------------+
1 row in set (0.00 sec)

mysql> 

示例4:求所有手机的平均价

mysql> select avg(m_price) from mobile;
+--------------+
| avg(m_price) |
+--------------+
|         3575 |
+--------------+
1 row in set (0.00 sec)

mysql> 

1.6 分组查询

所谓的分组呢就是类似于我们生活中的分组,比如把男生分成一组,女生分成另一组,又或者把个子高的分成一组,个子矮的分成另一组等等。分组的语法如下:

SELECT 分组字段|聚合函数 FROM 表名
	GROUP BY 分组的字段
	HAVING 分组的条件;

在分组中的条件用的关键字是HAVING而不是WHERE,在having的后面,可以使用分组函数,而where后面是不能使用分组函数的的。还是以上面的手机表为例,下面我们看几个示例。
示例1:查询手机表中,各厂商的手机数量

mysql> select p_belong,count(*) from mobile group by p_belong;
+----------+----------+
| p_belong | count(*) |
+----------+----------+
| 苹果     |        3 |
| 小米     |        3 |
| 锤子     |        1 |
| 华为     |        1 |
| vivo     |        1 |
+----------+----------+
5 rows in set (0.01 sec)

我们这里要值得注意的是,select 后面的字段必须是group by 后面的字段或聚合函数,否则就会报错。
示例2:对分组后的数据加上分组条件
我们上面查出了各个品牌的手机数量,但是我们如果我们想看数量超过1个的品牌,示例代码如下:

mysql> select p_belong,count(*) as amount from mobile group by p_belong having amount >1;
+----------+--------+
| p_belong | amount |
+----------+--------+
| 苹果     |      3 |
| 小米     |      3 |
+----------+--------+
2 rows in set (0.00 sec)

从这里我们可以看出having主要是用在对分组后的数据进行过滤。

1.7 分页查询

当表中的数据非常多的时候,我们一般不会一次性将所有的数据都展现出来,我们会使用关键字LIMIT M,N进行分页显示,比如我们想显示手机信息表中的第2条到第5条的数据,我们先看一个示例感受一下。

mysql> select * from mobile limit 1,4;
+------+------------+---------+----------+
| m_id | m_name     | m_price | p_belong |
+------+------------+---------+----------+
|    2 | 小米Plus   |    1700 | 小米     |
|    3 | 小米6      |    2700 | 小米     |
|    4 | iphone12   |    5700 | 苹果     |
|    5 | 锤子T7     |    3700 | 锤子     |
+------+------------+---------+----------+
4 rows in set (0.00 sec) 

LIMIT 后有两个参数,141表示从第二条记录开始显示,4表示,从第二条记录开始往后显示4条数据。

1.8 INSERT INTO SELECT 语句

该语句的作用为把查询出来的结果,插入到另一张已经存在的表中,值得注意的是插入的数据要与新表的表结构一致才能正常插入,比如我们以及有张手机信息表了,此时我们还有一样苹果手机信息表,我们想把手机信息表中的数据复制到苹果信息表中,就可以使用该语句,示例代码如下:

mysql> select 8 from apple;
Empty set (0.00 sec)

mysql> insert into apple select * from mobile where p_belong ='苹果';
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from apple;
+------+----------+---------+----------+
| m_id | m_name   | m_price | p_belong |
+------+----------+---------+----------+
|    1 | iphone6s |    1700 | 苹果     |
|    4 | iphone12 |    5700 | 苹果     |
|    9 | iPhone20 |    NULL | 苹果     |
+------+----------+---------+----------+
3 rows in set (0.00 sec)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL查询是指在查询结果集中,根据指定的起始位置和每页显示的记录数,返回对应的记录。常见的MySQL分页查询方法有两种:使用LIMIT关键字和使用子查询。 第一种方法是使用LIMIT关键字,其语法为:SELECT * FROM table LIMIT m, n。其中m表示起始位置,n表示每页显示的记录数。引用中提到,该查询方法能够实现分页,但m越大,查询性能就越低,因为MySQL需要扫描全部m+n条记录。 第二种方法是使用子查询,其语法为:SELECT * FROM (SELECT * FROM table LIMIT m, n) AS t。这种方法相比第一种方法,性能更强,尤其是当m的值较大时。引用指出,由于内部的子查询只扫描了id字段,而非全表,所以性能要强于第一种方法,并且能够解决跨页查询问题。 综上所述,MySQL分页查询可以通过使用LIMIT关键字或者子查询来实现。具体选择哪种方法取决于查询的需求和性能要求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MySQL分页查询的5种方法](https://blog.csdn.net/m0_67391401/article/details/126062208)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [mysql 数据库分页查询详细讲解](https://blog.csdn.net/m0_37449634/article/details/128903042)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑大钱呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值