数据库系统概念:集合运算、空值、聚集函数

public class DataBase {
    public static void main() {

    }
}

/*
    3.5 集合运算

    SQL作用在关系上的union、intersect和expect运算对应于数学集合论中的并,交,减运算

    union、intersect、expect:去除重复
    union all、intersect all、expect all:不去除重复
 */

/*
    3.6 空值

    如果算术表达式的任一输入为空,则该算术表达式的结果为空

    涉及到空值的比较运算的结果为unknown

    由于where子句中对比较结果使用诸如and or not的布尔运算,所以这些不二运算的定义也
    扩展到了可以处理unknown值。
        and:true and unknown 是 unknown
            false and unknown 是 false
            unknown and unknown 是 false

        or:true or unknown 是 true
            false or unknown 是 unknown
            unknown or unknown 是 false

        not not unknown 是 unknown

    如果where子句的谓词对一个元组计算出false或unknown,那么该元组不能加入到结果集中。

    当使用select distinct子句时:重复元组被除去。为了达到这个目的,当比较两个元组的属性
    时,如果这两个值都是非空并且值相等,或者为空,那么它们是相同的。这与在where中对null的
    比较结果并不相同。同适用于集合的并、交、差
 */

/*
    3.7 聚集函数

    avg、min、max、sum、count

    3.7.1 基本聚集

    某种情况下,我们需要删除重复元组,可以在聚集表达式中使用关键字distinct。
        select count(distinct Id)
        from teachers
        where semester = 'Spring' and year = 2010

    3.7.2 分组聚集

    group by子句中给出的一个或多个属性是用来构造分组的,在group by子句中的所有
    属性上取值相同的元组被分到一个组中。

    ******************************************************************
    ******************************************************************

    当SQL查询使用分组时,一个很重要的事情就是需要保证出现在select语句中,但是没有
    没有被聚集的属性只能是出现在group by子句中的那些属性。
        select dept_name, avg(salary) as avg_salary
        from instructor
        group by dept_name

        select avg(salary)
        from instructor

        select dept_name, count(distinct ID) as instr_count
        from instructor natural join teachers
        where semester = ’Spring' and year = 2010
        group by dept_name

    ******************************************************************
    ******************************************************************
    3.7.3 having子句

    有时候,对分组限定条件比对元组限定条件更有用。例如,我们也许只对教师平均工资超过
    42000美元的系感兴趣。该条件不是针对单个元组,而是针对group by子句构成的分组。
        select dept_name,avg(salary) as avg_salary
        from instructor
        group by dept_name
        having avg(salary) > 42000;
    与select子句的情况类似,任何出现在having子句中,但是没有被聚集的属性,必须出现在
    group by子句中。
    
    包含了聚集、group by 或 having子句的查询的含义可通过下述操作序列来定义:
        1.与不带聚集的情况类似,最先根据from子句来计算出一个关系。
        2.如果出现了where子句,where子句中的谓词将应用到from子句的结果集上
        3.如果出现了group by子句,满足where谓词的元组通过group by子句形成分组。如果
        没有group by子句,满足where谓词的整个元组集被当作一个分组。
        4.如果出现了having子句,它将应用到每个分组上;不满足having子句谓词的分组将被抛弃
        5.select子句利用剩下的分组产生出查询结果中的元组,即在每个分组上应用聚集函数来得到
        单个结果元组。
        
    3.7.4 对空值和布尔值的聚集
    
    聚集函数根据以下原则处理空值:除了count(*)外所有的聚集函数都忽略输入集合中的空值。由于
    空值被忽略,有可能造成参加函数运算的输入集合为空集。规定空集的count运算值为0,其他
    的所有聚集运算在输入空集的情况下,返回一个空值。
 */

 

转载于:https://www.cnblogs.com/junjie2019/p/10561784.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值