关于sql的UNION ,order by 、group by 、having等的用法

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

UNION ALL 命令和 UNION 命令几乎是等效的,不过UNION 选取不同的值,去掉重复的值,(比如有两个重复的1,只会留下一个)。而 UNION ALL  令会列出所有的值并且其中包括重复的值(可重复)

(突然想起来set也是没有重复值的,,也是会自动去掉重复的,个人觉得这方面还是跟UNION 有异曲同工之妙)

UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。


select * from table order by sum
意思是:返回表的所有行,行排序根据sum的降序来排

order by 、group by 、having的用法区别:
	order by 从英文里理解就是行的排序方式,默认的为升序,
	order by 后面必须列出排序的字段名,可以是多个字段名。
	group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。
	什么是“聚合函数”:像sum()、count()、avg()等都是“聚合函数”
	使用group by 的目的就是要将数据分类汇总。 一般如:select 单位名称,count(职工id),sum(职工工资) form [某表] group by 单位名称
		这样的运行结果就是以“单位名称”为分类标志统计各单位的职工人数和工资总额。
		在sql命令格式使用的先后顺序上,group by 先于 order by。 
		select 命令的标准格式如下: SELECT select_list  [ INTO new_table ]  FROM table_source  [ WHERE search_condition ]  [ GROUP 
			BY group_by_expression ]  [ HAVING search_condition ]  
		1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用.
		group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,
		必须出现在 group by 后面(重要) 例如,有如下数据库表: A    B  1    abc  1    bcd 1asdfg  如果有如下查询语句(该语句是错误的,
			原因见前面的原则)
		select A,B from table group by A  该查询语句的意图是想得到如下结果(当然只是一相情愿) A     B         abc  1     bcd        asdfg 
			 右边3条如何变成一条,所以需要用到聚合函数,
		如下(下面是正确的写法):  select A,count(B) as 数量 from table group by A  这样的结果就是  A 数量  1    
	Having 	
	where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用
		where条件显示特定的行。  
	having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用
		多个分组标准进行分组。	
	having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用
		聚合值,就如你在SELECT语句中 做的那样。例如:  SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2  
		 Grouping 的用法:  指示是否聚合 group by 列表中的指定表达式。
		在结果集中,如果 Grouping 返回 1 ,表示聚合;如果 Grouping 返回 0 ,表示非聚合。如果指定了 Group by ,那么只能用在Select ,
		 Having , Order by 中。
	注释:   GROUPING 用于区分标准空值和由 ROLLUP 、 CUBE 或 GROUPING SETS 返回的空值。作为 ROLLUP 、 CUBE 或 
		GROUPING SETS 操作结果返回的 NULL 是 NULL 的特殊应用。

                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值