Mysql学习mysql查询、子查询与连接查询详解
《Mysql学习mysql查询、子查询与连接查询详解》要点: 本节内容: 一、mysql查询的五种子句 select cat_id,max(goods_price) from goos group by cat_id; #查出价格最高的商品编号 select goods_id,max(goods_price) from goods group by goods_id; 2)min:求最小值 select sum(goods_number) from goods; ? (4)avg:求平均值 select cat_id,avg(goods_price) from goods group by cat_id; ? (5)count:求总行数 select cat_id,count(*) from goods group by cat_id; ? ?? ###要把每个字段名当成变量来理解,它可以进行运算### ? 例:查询本店每个商品价格比市场价低多少; ? ??? 查询每个栏目下面积压的货款 ? ??? ###可以用as来给计算结果取个别名### select cat_id,sum(goods_price * goods_number)? as hk from goods group by cat_id ? 不仅列名可以取别名,表单也可以取别名 ??? select goods_id,good_name,market_price - shop_price as s from goods having s>200 ; ??? //这里不能用where因为s是查询结果,而where只能对表中的字段名筛选 ? ??? 如果用where的话则是: ? ??? #同时使用where与having ??? select cat_id,market_price - shop_price as s from goods where cat_id = 3 having s > 200; ??? #查询积压货款超过2万元的栏目,以及该栏目积压的货款 ??? select cat_id,sum(shop_price * goods_number) as t from goods group by cat_id having s > 20000 ??? #查询两门及两门以上科目不及格的学生的平均分 ? ? 思路: ???? select name,avg(score) as pj from stu group by name; ??? #查出所有学生的挂科情况 ??? select name,score<60 from stu; ??? #这里score<60是判断语句,所以结果为真或假,mysql中真为1假为0 ??? #查出两门及两门以上不及格的学生 ??? select name,sum(score<60) as gk from stu group by name having gk > 1; ??? #综合结果 ??? select name,sum(score<60) as gk,avg(score) as pj from stu group by name having gk >1; ? 4、order by select * from goods where cat_id !=2 order by cat_id,price desc; ? 5、limit ??? select good_id,goods_price from goods order by good_price desc limit 3,3; ? ##查询每个栏目下最贵的商品 select cat_id,goods_id,shop_price from goods order by cat_id,shop_price desc; #上面的查询结果中每个栏目的第一行的商品便是最贵的商品 #把上面的查询结果理解为一个临时表[存在于内存中]【子查询】 #再从临时表中选出每个栏目最贵的商品 select * from (select goods_id,shop_price desc) as t group by cat_id; #这里使用group by cat_id是因为临时表中每个栏目的第一个商品便是最贵的商品,而group by前面没有使用聚合函数,所以默认就取每个分组的第一行数据,这里以cat_id分组 ? 良好的理解模型: 欢迎参与《Mysql学习mysql查询、子查询与连接查询详解》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |