sql的五种子句分别为:
where 条件查询
group by 分组
having 筛选
order by 排序
limit 限制结果条数
where的常用运算符
比较运算符
运算符 | 说明 |
<和<= | 小于和小于等于 |
>和>= | 大于和大于等于 |
= | 等于 |
<> 或 != | 不等于 |
in | 在某集合内,如 id in (值1,值2...值N); |
between | 在某范围内,如id between 值1 and 值2;取值包括两边边界值。 |
逻辑运算符
运算符 | 说明 |
NOT 或 ! | 逻辑非 |
OR 或 || | 逻辑或 |
AND 或 && | 逻辑与 |
模糊查询
使用关键字like进行模糊查询,“%”通配任意字符,“_”通配单一字符;
group by 子句
分组一般会配合统计函数一起使用,相关的统计函数:
max 求最大
min 求最小
sum 求总和
avg 求平均
count 求总行数
注意:在sql中把列当成变量看,处理起来会方便很多。
如:查询本店所有商品比市场价格低多少:select good_id,good_name,market _price-shop_price from goods;
查询每个栏目挤压的货款:select cat_id,sum(shop_price * good_num) from goods group by cat_id;
having 子句
where子句只能针对表进行查询,不能对结果再次进行查询(简单理解,表存储在硬盘上,结果存储在内存或缓存);若想对结果再次进行查询,需要通过having子句。
where子句只对表起作用,一般来说,where子句称为查询,having称为筛选。
如:查询店内低于市场价格200元的商品:select good_id,good_name,market _price-shop_price as jiesheng from goods having jiesheng > 200;(此处若用where会报错,因为jiesheng这个字段不存在表中,而是在查询结果中)
若sql语句中,同时包含where和having子句,where子句优先级要高于having子句。
如:查询栏目3下比市场价低200的商品:select good_id,cat_id,market_price-shop_price as jiesheng from goods where cat_id = 3 having jiesheng > 200;
如:查询积压货款大于2W的栏目以及积压的货款:select cat_id,sum(shop_price * good_num) as hk from goods group by cat_id having hk > 20000;
熟练运用where、group by、having
结果:
select name,avg(fenshu) as avg_fenshu from stu group by name;
SELECT name,fenshu<60 from stu;
SELECT name,sum(fenshu<60),avg(fenshu) as avg_fenshu FROM stu GROUP BY name;
SELECT name,sum(fenshu<60) as gk,avg(fenshu) as avg_fenshu FROM stu GROUP BY name HAVING gk >=2;
使用子查询实现:
select name,avg(fenshu) from stu where name in (select name from (select name,count(*) as gk from stu where fenshu<60 group by name having gk>=2) as tmp) group by name;
order by 子句
order by 子句排序默认是升序排列(ASC),若需要降序排列,使用关键词DESC;
limit 子句
limit使用格式:limit[offset,]N,其中offset代表偏移量,N代表取出的条目;
如:limit 3,3;表示从第四行开始取,取三行数据,即取第4~6行数据。
五个子句的优先级从高到底(执行顺序):where-->group by-->having-->order by-->limit.