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 条件];
这里我们先简单的解释一下上面的语法:
- SELECT:关键字表示你使用的查询语句
- [DISTINCT]:表示是否对查询的语句进行去重,可以不写,属于可选项
- *|列名1 ... :表示需要显示的列,比如一个表有5个字段,如果我们这里写*则表示显示所有的字段,如果我们写出具体的列名,那查询结果就只会显示我们指定的列数据。
- FROM:关键字表示,我们要查那张表
- WHERE:表示我们要查符合哪些条件的语句,如果不写,则会显示表中所有数据。
假设我们有一张关于手机商品的表,表的内容如下(数据仅为学习使用,并不代表真实数据):
------ ------------ --------- ----------
| 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语法中支持丰富的查询条件,具体如下:
下面我们看一些示例 还是上面的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中,提供了一些计算的函数,比如求和、求平均数、求最大值等,而这些函数呢,又被称为聚合函数,常用的聚合函数如下:
示例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 结尾
本期的内容就到这里了,如有不足之处还请大家多多指正,欢迎大家留言、关注、转发、收藏,谢谢。