格式:select [distinct ]* | 列名,列名 from 表名 WHERE 条件
- 查询所有的商品. select * from d_product;
- 查询商品名和商品价格. select pname,price from d_product;
- 别名查询.使用的关键字是as(as可以省略的)
- 3.1表别名: select * from d_product as p;
- 3.2列别名:select pname as pn from d_product;
- 去掉重复值. select distinct price from d_product;
- 查询结果是表达式(运算查询):将所有商品的价格打九折进行显示.
select pname,price*0.9 as newPrice from d_product;
1. 单表查询
1.1 排序
SELECT * FROM 表名 where 条件 ORDER BY 排序字段 ASC|DESC;
在价格排序(降序)的基础上,以分类排序(降序)
SELECT * FROM d_product ORDER BY price DESC,category_id DESC;
1.2 聚合
Tips:聚合函数会忽略空值。
- count:统计指定列不为NULL的记录行数;
- sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
- max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
- min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
- avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
/*1、count(列名) 统计个数*/
/*统计价格在800以上一共有多少商品*/
SELECT COUNT(*) as total from d_product where price>=800;
/*统计一共有几种价格*/
select count(DISTINCT price)from d_product;
/*2、sum 计算和值*/
/*统计价格的和值*/
select sum(price) from d_product;
/*3、max 获取最大值*/
/*获取价格最大的商品的价格*/
select max(price) from d_product;
/*4、min 获取最小值*/
/*获取价格最小的商品的价格*/
select min(price) from d_product;
/*5、avg 获取平均值*/
/*获取所有商品的平均价格*/
select avg(price) from d_product;
1.3 分组
SELECT 字段1,字段2… FROM 表名 GROUP BY分组字段 HAVING 分组条件;
having与where的区别:
- having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤- having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
/*按照价格分组*/
select price from d_product group by price;
/*按照类别id分组 该类名的商品个数 平均价格 类别*/
select count(*),avg(price),category_id from d_product group by category_id;
/*行筛选之后再分组*/
/*先行筛选再分组:对非空的category_id进行分组 注意where的位置*/
select count(*),avg(price),category_id from d_product where category_id is not null group by category_id;
/*先分组再筛选*/
/*筛选出评价价格在500以上的商品分组*/
select count(*),avg(price),category_id from d_product group by category_id having avg(price)>=500;