一. 排序查询
关键字: ORDER BY
语法:order by 排序字段 排序规则
排序规则:desc降序 ASC 升序 默认
#练习:将商品的成本价格按照从低到高进行排序
select * from m_goods ORDER BY costPrice asc;
多字段排序:排序字段之间用逗号隔开
练习:将商品的成本价格按照从低到高进行排序 如果成本价相同则按照销售价从高到低
select * from m_goods ORDER BY costPrice asc,specPrice DESC;
二. 分组查询
对查询结果中的数据进行分组处理,通常会配合聚合函数(count AVG sum max min)使用
关键字:group by
语法:group by 分组字段
#练习2:查询每一类商品中销售价格最低的商品价格 暂时有点问题(商品名称和价格对不上)
select catId,min(specPrice) from m_goods group by catId;
三. 分页查询
对于数据量比较大的表 查询过程中会使用到分页查询
关键字:limit
语法:limit 开始位置,取的记录数
#练习3.取出商品表中前五条数据
select * FROM m_goods LIMIT 0,5;
#简写形式
select * FROM m_goods LIMIT 5;
#取出商品表中第6到10条数据 (索引从0开始)(条数一共取了多少条的总数量)
select * FROM m_goods LIMIT 5,5;
四. 虚拟字段查询
当你需要对查询结果中的字段 进行条件选择的时候使用
关键字:having
考试题:where和having区别是什么?
where是对数据标准真实存在的字段进行条件筛选 having多数情况下是对远数据表中不存 在的字段(在查询过程中产生的字段)进行筛选
having 能不能对与数据表中真实存在的字段进行条件筛选? 能
SELECT avg(specprice) from m_goods GROUP BY catId having catId>1
五. 多表查询
SELECT goodsName,catname from m_goods,m_goodscate where m_goods.catId = m_goodscate.catId
5.1 左连接
关键字:left join
语法:表A left join 表B on 表A.字段 = 表B.字段
#查询商品名称对应的商品分类 表别名可以用空格隔开
SELECT goodsName,catname from m_goods s
left JOIN m_goodscate c
ON s.catId = c.catId;
注意:
1.多张表连接
2.以左边的表为基准通过关联字段 到右边的表中查找匹配数据 如果匹配不上则用空来代替
5.2 右连接
关键字:RIGHT JOIN
语法:表A left join 表B on 表A.字段 = 表B.字段
注意:
1.多张表连接
2.以右边的表为基准通过关联字段 到左边的表中查找匹配数据 如果匹配不上则用空来代替
3.在使用过程中 建议将右连接转化为左
SELECT * from man RIGHT JOIN woman on man.mid = woman.hid;
#转化左连接
SELECT * from woman LEFT JOIN man on man.mid = woman.hid;
5.3 内连接
关键字:inner JOIN
语法:表A INNER join 表B on 表A.字段 = 表B.字段
注意:
1.多张表连接
2.inner JOIN 左右俩张表中匹配成功的数据会被筛选出来
SELECT * from woman INNER JOIN man on man.mid = woman.hid;
六. 联合查询(了解)
1.union
#UNION 将俩个查询结果拼接到一起
SELECT * FROM tab1 UNION SELECT * FROM tab2
SELECT name,sum(num) FROM (SELECT * FROM tab1 UNION SELECT * FROM tab2) test
GROUP BY name
2.union all
SELECT name,sum(num) FROM (SELECT * FROM tab1 UNION ALL SELECT * FROM tab2) test
GROUP BY name
区别:对于俩个查询结果中完全相同的记录 union会去重 union all不会去重
注意:
1.两个查询结果中字段的数量必须保持一致
2.俩个字段查询结果中对应的字段数据类型最好也是一样的