关闭

再次认识mysql(二)

标签: mysql
131人阅读 评论(0) 收藏 举报
分类:

group 分组与统计函数

max()求最大  min()求最小   sum()求总和  avg()求平均   count()求行数 有多少行

select sum(goods_num*shop_price) from goods; 查询库存所有的价值金额 

select cat_id,avg(shop_price) from goods group by cat_id; 根据id分组  计算平均值

select cat_id,count(*) from goods group by cat_id;  查询每个栏目下商品数量

select cat_id,max(shop_price) from goods group by cat_id;查询每个栏目下最贵的商品价格


having:对结果集的再次筛选

select goods_id,goods_name,<market_price-shop_price> as jieyue from goods where jieyue>300;  典型错误 where会在磁盘中进行筛选  发现并没有jieyue 列

select goods_id,goods_name,<market_price-shop_price> as jieyue from goods having jieyue >300;


查询成绩2门及2门以上不及格的 学生 的平均分

思路:以结果为导向 先查找 所有学生 平均分和不及格数目    再在结果集中寻找2门以上挂科的

select name,avg(score) as pingjunfen,sum(score<60) as guake  from user  group by name   having  guake>=2;


order by 排序

利用行字段排序

升序 默认 asc       降序 desc 

多列排序  逗号隔开

select goods_id,cat_id,goods_name from goods order by cat_id  asc,shop_price,goods_id desc;


limit 限制取出条目

常用于分页

select  goods_id from goods order by shop_price desc  limit 3; 取出前三名价格最高的

select  goods_id from goods order by shop_price desc  limit 2,3; 取出  前  第三名  到第五名 价格的商品


查询陷阱

where group  by  having order by limit   五种限定词的顺序不可颠倒


子句查询

寻找最新的商品

1   select goods_id from goods order by goods_id dedc limit  0,1;

2   select goods_id from goods where  goods_id=(select max(goods_id) from goods);   where类型子查询  内层查询结果是外层的比较条件

from类型子查询   

select goods_id from (select goods_id from  goods order by cat_id asc,goods_id desc) group by cat_id;

exist类型子查询

select *from category where exists (select *from goods where goods.cat_id=cate.cat_id);


内连接

select * from table1 inner join table2  on table1.xx=table2.xx;

左右连接

select * from table1 left join table2 on table1.xx=table2.xx;    侧重于显示左侧  查不到 的null

select *from table2 right join table2 on table1.xx=table2.xx;   侧重于显示右侧  查不到的null


单张表连续左连接

select mid,t1,tname as hteam,mres,t2.tname as gteam,matime

            from m inner join t as t1 on m.hid=t1.tid inner join t as t2  on m.gid=t2.tid

            where matime between '2006-6-1'and '2006-7-1';


union查询 

  将多条sql查询结果合并成一个结果集  必须满足 各语句取出的列数相同   列名称以第一条为准   

   完全相等的列 将会被合并   合并过程非常耗时

   不丢失列  union  all       

   select  id,sum(num)  from (select *from a union all select *from b) as tmp group by id;

   




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:49236次
    • 积分:1348
    • 等级:
    • 排名:千里之外
    • 原创:90篇
    • 转载:13篇
    • 译文:0篇
    • 评论:3条
    最新评论