一.子查询
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.我们可以将公式表达式看作临时结果集,在数据查询语言的执行范围内定义