基本sql语句--五种子句

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.
 
 
 
原文地址:https://www.cnblogs.com/skyline1011/p/5939495.html