mindmap
查询数据库
(1)查询全表数据
a.查询所有数据库:select * from 表名;
b.查询某一项或者几项: select 列名1,列名2,... from 表名;
c.去除重复项查询: select distinct 列名1,列名2,...from 表名;
(2)条件查询
select 列名 from 表名 where 判断条件;
模糊查询
(3)聚合查询
(4)排序查询
(5)分组查询
(6)分页查询
-
聚合查询
- a.聚合查询count(*);
- b.获取最高max();
- c.获取最低min();
- d.总数sum();
- e.平均数AVG();
-
排序查询
- 升序:order by 列名 asc;
- 降序: order by 列名 desc;
全表查询实操: (1)指定列查询,只显示我们需要的列:
而原表实际上还有其他列,原表如下:
(2)适应distinct可以去除重复数据: select distinct 列名1,列名2,...from 表名; (3)null值判断: SELECT name,price,ifnull(stock,0)+10 FROM product;
可见,玩偶的库存值变成了10;
(4)也可以给查询出来的结果表的某一列起一个别名:
SELECT name,price,ifnull(stock,0)+10 as stock10 FROM product;
可以看到,查询出来的表格中的列名改变了,呈现的是我们起的别名,当然原表列名没有改变,我们现在看到的查询表,不是原表;
条件查询实操:
(1)三段式:select 列名 from 表名 where 判断条件;
原表:
查询库存大于20的商品:
SELECT * FROM product WHERE stock>20;
只显示特定列:
SELECT name FROM product WHERE stock>20;
查询区间:
SELECT * FROM product WHERE price >=2000 AND price <=6000;
(其中AND和&是一个作用)
也可以用between A and B: SELECT * FROM product WHERE price BETWEEN 2000 AND 6000;
特定或值查询:
SELECT * FROM product WHERE stock = 16;
SELECT * FROM product WHERE stock = 16 or stock = 8;
SELECT * FROM product WHERE stock in (16,8);
SELECT * FROM product WHERE stock is NULL;
注意:用等号=查不出来null空值;
也可以查非空,用is not null
SELECT * FROM product WHERE stock is not NULL;
(2)模糊查询:
理解:百度经常用的就是模糊查询,即与该关键信息相关的数据都会呈现出来
SELECT * FROM product WHERE name like '手%';
//其中,%代表的是任意字符,不过这里注意顺序,手%表示要求第一个字符为'手'
SELECT * FROM product WHERE name like '%机';
//%机表示要求最后一个字符为'机'
SELECT * FROM product WHERE insert_time like '%20';
SELECT * FROM product WHERE insert_time like '%0';
查询第二个字是'衣'的数据:
SELECT * FROM product WHERE name like '_衣%';
%机%可以查找name任意位置为'机'的数据:
SELECT * FROM product WHERE name like '%机%';
(3)查询-聚合查询:
聚合查询:
SELECT COUNT(*) FROM product;
查询结果为8,表明product表中总共有8行数据;
//查询最大值,这里是查询价格的最大值:
SELECT max(price) FROM product;
//获取最低库存:
SELECT min(stock) FROM product;
//获取某列总和:
SELECT sum(stock) FROM product;
//也可以求平均值:
SELECT avg(price) FROM product WHERE stock>8;
排序查询实操: 升序: order by 列名 asc 降序: order by 列名 desc
//按照库存升序的方式排序查询:
SELECT * FROM product order by stock asc;
//查询表中包含'机'的商品信息,并且按照金额降序排序:
SELECT * FROM product WHERE name LIKE '%机%' order by price desc;
分组查询实操:
//按照插入时间进行分组查询,获取每组商品的总金额:
SELECT insert_time,sum(price) FROM product group by insert_time;
//金额大于2000的商品,按照插入时间分组,获取每组商品的总金额:
SELECT insert_time,sum(price) FROM product WHERE price >2000 group by insert_time;
//金额大于2000的商品,按照插入时间分组,获取每组商品的总金额,并且要总金额>7000的信息:
//其中having后面接的是一个过滤条件;having用于过滤分组之后的信息,要在分组后面用;
SELECT insert_time,sum(price) getsum FROM product WHERE price >2000 group by insert_time HAVING getsum > 7000;
//注意getsum是一个别名;
//在以上的基础上,还可以继续降序排列查询:
SELECT insert_time,sum(price) getsum FROM product WHERE price >2000 group by insert_time HAVING getsum > 7000 ORDER BY getsum desc;
分页查询实操:
select * from 表名 limit (所查页码-1)* 每页数量 ,每页数量; 理解:其实这里的[(所查页码-1)* 每页数量]即为起始索引;
//查询表中的第一页数据,每一页2行数据:
//计算过程:
SELECT * FROM product limit (1-1)* 2,2;
SELECT * FROM product limit (0)* 2,2;
SELECT * FROM product limit 0,2;
易错:要输计算结果,否则出错;
查第二页数据: