MySQL查询语句之复杂查询

一. 排序查询

        关键字: 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.俩个字段查询结果中对应的字段数据类型最好也是一样的

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值