Mysql查询命令select以及子句分析

查询:

(1)where子句

select name from 表名 where 表达式

select name from 表名 where name like 'Nokia%‘;   //再次强调like 模糊匹配只有%和_,分别表示多个个一个,所以正则表达式更强大!


(2)group子句

一般用在统计场合。和聚合函数一起用。


select max(shop_price) from goods;        //查出shop_price最大的那个

group命令:

select cat_id,max(shop_price) from goods group by cat_id;        //按cat_id分组,把每一组价格最大的拿出来,并且查询显示的形式为cat_id。如图:

Mysql查询命令select以及子句分析_第1张图片


select min(shop_price) from goods;   最小

select avg(shop_price) from goods;    平均

select sum(shop_price) from goods;    商品价格

select count(*) from goods;               统计一共多少行

select cat_id,count(*) from goods group by cat_id;     统计每个cat_id下面有多少商品   COUNT是统计行数用的


select goods_id,goods_name, market_price-shop_price from goods;      每个market_price-shop_price的结果

select cat_id,sum(shop_price*goods_number) from goods group by cat_id;       以cat_id分栏目,计算每个栏目的乘积


可以给列或计算结果取别名,用as:

Mysql查询命令select以及子句分析_第2张图片



取别名注意AS要位于FROM之前,否则不起作用。


(3)having子句

由于where在select时对表文件查询产生一个中间结果,如果要对结果进行进一步的筛选,就用到了having。

所以 如果写一个select语句where在前having在后

select goods_id,cat_id,market_price-shop_price from goods where cat_id > 5 having goods_id > 10;    //简单用法    

select goods_id,cat_id,market_price-shop_price as sheng from goods where cat_id > 5 having sheng > 100;       //和as结合


出一道题,查询两门及两门以上不及格者的平均成绩。   (查的是这类人的平均成绩,不用子查询,不用左连接)
表如图:
Mysql查询命令select以及子句分析_第3张图片


步骤:1.先查询每个人挂科情况,利用(score<60)做相当于布尔值判定:
Mysql查询命令select以及子句分析_第4张图片

2.计算每个人挂科数目的累加数目,以及所有成绩的平均值
Mysql查询命令select以及子句分析_第5张图片

3.使用having筛选出结果:
Mysql查询命令select以及子句分析_第6张图片


所以其实只有一句就可以了: select name,sum(score < 60) as guake, avg(score) as avg from grade group by name having guake >= 2;


(4)order by子句

功能:俺一个或多个字段对查询结果进行排序。
按照价格排序:
select goods_id,cat_id,goods_name,shop_price from goods order by shop_price;

升序也可以显示声明,可以用asc,不过一般不用。

排序默认是升序的,需要降序排列必须显示声明:
select goods_id,cat_id,goods_name,shop_price from goods order by shop_price desc;

多重排序:
select goods_id,cat_id,goods_name,shop_price from goods order by cat_id, shop_price;      先按栏目号cat_id排列,同栏目号的按价格排列

也可混合升序或者降序。


(5)limit 子句

limit子句的格式是:limiit [offset] N,如果不写相当于limit N,此时offset=0

select goods_id,goods_name from goods limit 1;     限制查询数目为1



5个子句是有顺序要求的,先后是:WHERE,GROUP BY,  HAVING, ORDER BY,LIMIT





你可能感兴趣的:(数据库)