3. SQL中的子句

1. where

仅使用 SELECT 和 FROM 子句你会受到表中的每一行数据均返回的限制.

2. starting with

SELECT 
PAYEE,
AMOUNT,
REMARKS 
FROM CHECKS
WHERE
PAYEE STARTING WITH('Ca') 
OR REMARKS LIKE 'G%';

3. order by

对查询输出的结果按照一定的规则排序,不使用order by,数据输出的情况是按照它们被输入的先后次序排序的。



1. 降序排列:
	SELECT * FROM 
	CHECKS 
	ORDER BY PAYEE DESC;

2. 升序排列(默认)SELECT PAYEE,AMOUNT 
	FROM CHECKS 
	ORDER BY PAYEE ASC;
	
3. order by 可以使用多个字段
	SELECT * FROM 
	CHECKS 
	ORDER BY PAYEE,REMARKS;

    如何将一列按字母的正顺排列,
    而把第二列按字母的逆序进行排列.

    SELECT * FROM 
    CHECKS 
    ORDER BY 
    PAYEE ASC,
    REMARKS DESC;
	
	注:如果你已经知道了进行排列的列是表中的第一列,
	可以用 ORDER BY 1 来代替输入列的名字;
	
	SELECT * FROM CHECKS ORDER BY 1;
	

4. group by

1. SELECT PAYEE,
	SUM(AMOUNT) 
	FROM CHECKS 
	GROUP BY PAYEE;

注意:
	SELECT 子句有一个正常的列,
	之后是一个汇总函数,
	如果它的后边只有 FROM 表 子句的话,那么会报错.
	
	报错信息:
	SELECT PAYEE SUM AMOUNT FROM CHECKS
	Dynamic SQL Error
	-SQL error code = -104
	-invalid column reference
	
	错误信息表明 SQL 无法把正常的列和汇总函数结合在一起,
	这时,就需要 GROUP BY 子句,
	它可以对 SELECT 的结果进行分组后应用在汇总函数.
	
	eg:对 REMARKS 进行分组并找出组中的最大值和最小值.
		SELECT 
		MIN(AMOUNT),
		MAX(AMOUNT) 
		FROM CHECKS 
		GROUP BY
		REMARKS;
	
	注:如果我们在分组时指定的列名
	与 SELECT 中指定的列名不相同,
	报错。
	
	SELECT PAYEE,
	MAX(AMOUNT),
    MIN(AMOUNT),
    FROM CHECKS
	GROUP BY REMARKS;
	
	报错信息:
	GROUP BY REMARKS
    Dynamic SQL Error
    -SQL error code = -104
    -invalid column reference
    
    分析:查询无法对 REMARK 进行分组,
    当查询在 REMARK 字段中找到了两个重复的数值,
    但他们的PAYEE不同,
    这表明 GAS 有两个 PAYEE.
    这将导致错误的发生.
    
    规则是,
    当要求分组结果返回多个值时,
    不能在 SELECT 子句中使用除分组列之外的列,
    这将导致错误的返回值,
    可以使用在 SELECT 中未列出的的列进行分组
    	
	
5. having

1. 对输出的结果进行分组并显示每一组的平均工资:
	SELECT 
	TEAM,
	AVG(SALARY) 
	FROM 
	ORGCHART 
	GROUP BY TEAM;
	
	
2. 返回分组后平均工资低于38000的组:
	SELECT 
	TEAM,
	AVG(SALARY) 
	FROM ORGCHART
	WHERE AVG(SALARY) < 38000 
	GROUP BY TEAM;
	
	报错信息:
	Dynamic SQL Error
    -SQL error code = -104
    -Invalid aggregate reference
    
    分析:
    错误产生的原因是
    由于汇总函数不能工作在 WHERE 子句中.
    让这个查询工作,可以使用 —— HAVING 子句.
    
    eg:
    SELECT TEAM,
    AVG(SALARY)
    FROM 
    ORGCHART 
    GROUP BY TEAM
	HAVING 
	AVG(SALARY) < 38000;
	
	HAVING 子句允许将汇总函数作为条件,
	
	SELECT TEAM,
	AVG(SICKLEAVE), 
	AVG(ANNUALLEAVE) 
	FROM ORGCHART
	GROUP BY TEAM
	HAVING 
	AVG(SICKLEAVE) > 25 
	AND 
	AVG(ANNUALLEAVE) < 20;
	
	SELECT 
	TEAM,
	AVG(SICKLEAVE),
    AVG(ANNUALLEAVE) 
    FROM ORGCHART
	GROUP BY 
	TEAM 
	HAVING 
	COUNT(TEAM) > 1
	
注:
	该查询返回了组中成员大于 1 的组,
	虽然的 SELECT 子句中没有出现 COUNT(TEAM)语句,
	但是它还是在 HAVING 子句中起到了它应有的作用.HAVING 子句中也可以使用其它的逻辑操作符:
	
	SELECT 
	TEAM,
	MIN(SALARY), 
	MAX(SALARY) 
	FROM 
	ORGCHART
	GROUP BY TEAM
    HAVING AVG(SALARY) > 37000
	OR
	MIN(SALARY) > 32000;
	
	注:操作符 IN 也可以在 HAVING 子句中使用.
	
	
6. 子句的综合使用
  1. 找出所有 CHECKS 表中对 CASH 和对 GAS 支付的记录并按 REMARKS 进行排序。

    
    SELECT 
    PAYEE,
    REMARKS 
    FROM 
    CHECKS 
    WHERE 
    PAYEE='Cash'
    OR 
    REMARKS 
    LIKE 'Ga%' 
    ORDER BY REMARKS;
    
    注:
    无论在什么情况下进行分组,
    SELECT 语句中出现的字段只能是在
    GROUP BY 中出现过才可以。
    
    
    
  2. 使用 ORGCHART 表找出病候天数少于 25 天的人的工资并按名字进行排序

    
    SELECT 
    NAME,
    SALARY 
    FROM 
    ORGCHART 
    WHERE 
    SICKLEAVE < 25 
    ORDER BY
    NAME;
    
    
    
  3. 使用 ORGCHART 表对每一个 TEAM 显示 TEAM,AVG(SALARY),AVG(SICKLEAVE) 和 AVG(ANNUALLEAVE)

    
    SELECT 
    TEAM,
    AVG(SALARY),
    AVG(SICKLEAVE),
    AVG(ANNUALLEAVE)
    FROM
    CHECKS
    GROUP BY TEAM;
    
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在KingbaseESv8,在包含group by子句SQL,出现在select子句的列除了用于分组函数,还能用于A. where子句,C. having子句和D. order by子句。 ### 回答2: 在KingbaseESv8,在包含group by子句SQL,出现在select子句的列除了可以用于分组函数,还可以用于where子句、having子句和order by子句。 A. where子句:通过在where子句使用在select子句出现的列,可以对查询结果进行过滤。例如,可以使用这些列来设置筛选条件,只返回满足条件的行。 B. group by子句:在group by子句,需要对查询结果进行分组的列必须在select子句出现,并且不能包含聚合函数。使用这些列可以指定分组的标准,对数据进行分类。 C. having子句:在having子句,可以对分组后的结果集进行过滤。通过在select子句使用的列,可以在having子句设置条件,只返回满足条件的分组结果。 D. order by子句:通过在order by子句使用在select子句出现的列,可以对查询结果进行排序。可以通过升序(ASC)或降序(DESC)来指定列的排序方式。 综上所述,除了用于分组函数,出现在select子句的列在KingbaseESv8还可以用于where子句、group by子句、having子句和order by子句。 ### 回答3: 在KingbaseESv8,在包含group by子句SQL,出现在select子句的列,除了用于分组函数,还能用于where子句、having子句和order by子句。 A. where子句:可以使用select子句的列进行条件筛选。例如,可以使用select子句的列来判断某个条件是否成立,然后在where子句进行筛选。 B. group by子句:select子句的列可以用作group by子句的依据,根据这些列的值将结果分组。 C. having子句:此子句可以用于对分组进行筛选,可以使用select子句的列来进行分组后的条件判断。只有满足条件的分组才会出现在最终结果。 D. order by子句:可以使用select子句的列来对结果进行排序。根据select子句的列的值,对结果进行升序或降序排列。 总结:在KingbaseESv8,在包含group by子句SQL,出现在select子句的列,除了用于分组函数,还可以用于where子句、group by子句、having子句和order by子句。这些使用场景可以根据实际需求来进行筛选、分组、分组筛选以及排序操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值