SQL查询、嵌套子查询

1、聚集函数:是以值的一个集合(集或多重集)为输入,返回单个值的函数。

             SQL提供了五个固有聚集函数:

                        平均值:avg

                                 最小值:min

                                 最大值:max

                                 总和:sum

                                 计数:count

            其中,sum和avg的输入必须是数字集,但其他运算符还可以作用在非数字数据类型的集合上,如字符串。

还有分组聚集(group by):其中子句出的一个或多个属性是用来构造分组的,在group by子句中的所有属性上取值相同的元组将被分在一个组中。

having子句类似于where子句,但其是对分组限定条件,而不是对元组限定条件,having子句中的谓词在形成分组后才起作用,因此可以使用聚集函数。

2、注意:与select子句的情况类似,任何出现在having子句中,但没有被聚集的属性必须出现在group by子句中,否则这样的查询就是错误的。任何没有出现在group by子句中的属性,如果出现在select子句中的话,它只能出现在聚集函数内部,否则这样的查询就是错误的。

3、空值:在谓词中可以使用特殊的关键词null测试空值,也可以使用is not null测试非空值。

             如:找出instructor系中元组在属性salary上取空值的教师名

                    select name

                    from instructor where salary is null

空值的存在给聚集运算的处理带来了麻烦,聚集函数根据以下原则处理空值:

              除了count*)外所有的聚集函数都忽略输入集合中的空值;

              规定:空集的count运算值为0,其他所有聚集运算在输入为空集的情况下返回一个空值。

4、嵌套子查询:子查询是嵌套在另一个查询中的select—fromwhere表达式。子查询嵌套在where子句中,通常用于对集合的成员资格、集合的比较以及集合的基数进行检查,还用于:空关系测试,重复元祖存在性测试,from子句中的子查询,with子句。

           集合成员资格:连接词in测试元组是否是集合中的成员,集合是由select子句产生的一组值构成的,对应的还有not in

短语“至少比某一个要大”在SQL中用“>some”表示。

some子句的定义:C <comp> some r <=>存在t属于r(C <comp> t),其中<comp>可以为:< ,>,=,……

                    =some=in;但是,(不等于some)不等于not in

   SQL中,结构>all对应于词组“比所有的都大”。

  all子句的定义:C <comp> all r <=> 任意t属于r(C<comp>t);(不等于all)等于not in 但是,(=all)不等于in。

SQL还有一个特性可测试一个子查询的结果中是否存在元组。exists结构在作为参数的子查询为空时返回true值。

       Exists r <=> r不等于0

       Not exists r<=> r=0

 还可以将“关系A包含关系B”写成“not exists(B except A)”.

还有一个布尔函数,用于测试在一个子查询的结果中是否存在重复元组。如果作为参数的子查询结果中没有重复的元组unique结构将返回true值。

SQL允许在from子句中使用子查询表达式。任何select-from-where表达式返回的结果都是关系,因而可以被插入到另一个select-from-where中任何关系可以出现的位置。

with子句提供定义临时关系的方法,这个定义只对包含with子句的查询有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值