[3]查询数据库

87 阅读4分钟
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)指定列查询,只显示我们需要的列:

image.png

而原表实际上还有其他列,原表如下:

image.png

(2)适应distinct可以去除重复数据: select distinct 列名1,列名2,...from 表名; (3)null值判断: SELECT name,price,ifnull(stock,0)+10 FROM product;

image.png

可见,玩偶的库存值变成了10; image.png

(4)也可以给查询出来的结果表的某一列起一个别名: SELECT name,price,ifnull(stock,0)+10 as stock10 FROM product; 可以看到,查询出来的表格中的列名改变了,呈现的是我们起的别名,当然原表列名没有改变,我们现在看到的查询表,不是原表; image.png

条件查询实操:

(1)三段式:select 列名 from 表名 where 判断条件;

原表:

image.png

查询库存大于20的商品:

SELECT * FROM product WHERE stock>20;

image.png

只显示特定列:

SELECT name FROM product WHERE stock>20;

image.png

查询区间:

SELECT * FROM product WHERE price >=2000 AND price <=6000;

(其中AND和&是一个作用)

image.png

也可以用between A and B: SELECT * FROM product WHERE price BETWEEN 2000 AND 6000;

image.png

特定或值查询:

SELECT * FROM product WHERE stock = 16;

image.png

SELECT * FROM product WHERE stock = 16 or stock = 8;

image.png

SELECT * FROM product WHERE stock in (16,8);

image.png

SELECT * FROM product WHERE stock is NULL;

image.png

注意:用等号=查不出来null空值;

image.png

也可以查非空,用is not null

SELECT * FROM product WHERE stock is not NULL;

image.png

(2)模糊查询:

理解:百度经常用的就是模糊查询,即与该关键信息相关的数据都会呈现出来

SELECT * FROM product WHERE name like '手%';
//其中,%代表的是任意字符,不过这里注意顺序,手%表示要求第一个字符为'手'

image.png

SELECT * FROM product WHERE name like '%机';
//%机表示要求最后一个字符为'机'

image.png

SELECT * FROM product WHERE insert_time like '%20';

image.png

SELECT * FROM product WHERE insert_time like '%0';

image.png

查询第二个字是'衣'的数据:

SELECT * FROM product WHERE name like '_衣%';

image.png

%机%可以查找name任意位置为'机'的数据:

SELECT * FROM product WHERE name like '%机%';

image.png

(3)查询-聚合查询:

聚合查询:
SELECT COUNT(*) FROM product;

查询结果为8,表明product表中总共有8行数据;

image.png

//查询最大值,这里是查询价格的最大值:
SELECT max(price) FROM product;

image.png

//获取最低库存:
SELECT min(stock) FROM product;

image.png

//获取某列总和:
SELECT sum(stock) FROM product;

image.png

//也可以求平均值:
SELECT avg(price) FROM product WHERE stock>8;

image.png

排序查询实操: 升序: order by 列名 asc 降序: order by 列名 desc

//按照库存升序的方式排序查询:
SELECT * FROM product order by stock asc;

image.png

//查询表中包含'机'的商品信息,并且按照金额降序排序:
SELECT * FROM product WHERE name LIKE '%机%' order by price desc;

image.png

分组查询实操:

//按照插入时间进行分组查询,获取每组商品的总金额:
SELECT insert_time,sum(price) FROM product group by insert_time;

image.png

//金额大于2000的商品,按照插入时间分组,获取每组商品的总金额:
SELECT insert_time,sum(price) FROM product WHERE price >2000 group by insert_time;

image.png

//金额大于2000的商品,按照插入时间分组,获取每组商品的总金额,并且要总金额>7000的信息:
//其中having后面接的是一个过滤条件;having用于过滤分组之后的信息,要在分组后面用;
SELECT insert_time,sum(price) getsum FROM product WHERE price >2000 group by insert_time HAVING getsum > 7000;
//注意getsum是一个别名;

image.png

//在以上的基础上,还可以继续降序排列查询:
SELECT insert_time,sum(price) getsum FROM product WHERE price >2000 group by insert_time HAVING getsum > 7000 ORDER BY getsum desc;

image.png

分页查询实操:

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;

image.png

易错:要输计算结果,否则出错;

image.png

查第二页数据:

image.png