快捷搜索:  汽车  科技

mysql分页查询(MySQL简单查询过滤查询)

mysql分页查询(MySQL简单查询过滤查询)mysql> select distinct p_belong from mobile; ---------- | p_belong | ---------- | 苹果 | | 小米 | | 锤子 | | 华为 | | vivo | ---------- 5 rows in set (0.00 sec)去重也可以对多个字段去重,但是要值得注意的是,如果是多个字段,那么要每个字段的值一样,才会去重,如果有一个字段值是不一致的,它是不会去重的。比如我们想看一下,这些手机分别都是那几家公司的,如果我们直接查询,由于有的厂商它有多个产品,那么它就会有重复的数据,能看,但是不友好,此时我们可以查询关键字对其进行去重,直接查询出结果,示例代码如下:mysql> select * from mobile; ------ ---------

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语法中支持丰富的查询条件,具体如下:

mysql分页查询(MySQL简单查询过滤查询)(1)

下面我们看一些示例 还是上面的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中,提供了一些计算的函数,比如求和、求平均数、求最大值等,而这些函数呢,又被称为聚合函数,常用的聚合函数如下:

mysql分页查询(MySQL简单查询过滤查询)(2)

示例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 后有两个参数,1和4,1表示从第二条记录开始显示,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.9 结尾

本期的内容就到这里了,如有不足之处还请大家多多指正,欢迎大家留言、关注、转发、收藏,谢谢。

猜您喜欢: