一.子查询

        1.子查询的特点和优势

              (1).使用灵活,可以成为SQL语句的多个部分

                       子查询作为查询条件使用:select  列名1,列名2... from 表名 where 列名 (子查询)

                       子查询作为临时表使用:select 列名1,列名2... from(子查询) where 条件

                       子查询作为列使用: select (子查询),列名1,列名2... from 表名 【where 条件】

              (2).降低SQL语句的复杂度,提高SQL语句的可读性

        2.使用 in 和 not in

              (1). in 和 not in 通常在where子句中使用                      

              (2).在 in 和 not in 后接的子查询,可以有多个值出现,但不许只能有一列

              (3).in 子句中可以包含多个值,值与值之间使用逗号隔开

       3.使用 exists 和 not exists

              (1).exists 和 not exists 表示存在和不存在

              (2).在语句中会判断 exists 和 not exists 后接的子句是非存在

              (3).exists 和 not exists 用法一样,意义相反

       4.使用 some,any,all

              (1)在SQL查询中,some,any,all后必须跟子查询

              (2)在SQL查询中,some和any作用一样,表示其中任意一项,all表示其中所有的项

二.聚合函数

使用 compute 和 compute by 进行汇总

       1.使用 compute 进行汇总得到两个结果集                           

              (1).第一个结果集返回查询语句前面的查询明星

              (2 ) .第二个结果集返回汇总的结果。

       2.compute 子句需要的信息

              (1).可选 by 关键字。他给予每一列计算指定的行聚合。

              (2).行聚合函数名称。包括 sum, avg等等

              (3).要对其执行行聚合函数的列

       3.例:select * from stumarks order by stuid desc compute avg(score)  by stuid

三.排序函数

       1.语法: 排序函数 () over ([分组子句] 排序子句 [ desc | asc ])

       2.排序函数分类

              (1).row_number 函数生成的排序根据排序子句给出递增连续的序号

              (2).rank 函数生成的排序根据排序子句给出递增的序号,但是存在并列并跳号

              (3).dense_rank 函数生成的排序根据排序子句给出递增的序号,但是存在并列不跳号

       3.例:select dense_rank () over (partition by subject order by scoer desc) as '排名'

                   stuinfo.stuid,stuname,subject from stuinfo,stumarks where stuinfo.stuid=stumarks.stuid

四.公示表表达式

       1.在查询过程中需要一些中间表,而这些中间表就叫公式表达式

       2.我们可以将公式表达式看作临时结果集,在数据查询语言的执行范围内定义