SQL语句中常用的语句
GROUP BY 子句
GROUP BY [ALL] gyoup_by_expression [,...n] [WITH {CUBE | ROLLUP}]
CUBE:除了返回由GROUP BY子句指定的列外,还返回按组统计的行.返回的结果先按组的第一个条件列排序显示,再按第二个条件列排序显示,以此类推.统计行包括了GROUP BY子句指定的列的各种组合的数据统计.
ROLLUP:与CUBE不同的是,此选项对GROUP BY子句中的列顺序敏感,它只返回第一个分组条件指定的列的统计行,改变列的顺序会使返回的结果发生变化
COMPUTE子句
COMPUTE子句在查询结果的末尾生成一个汇总数据行,
其语法如下:
COMPUTE {{AVG | COUNT | MAX | MIN | SUM} (expression)}[,...n][BY expression [,...n]]
AVG | COUNT | MAX | MIN | SUM
这些函数均会忽略NULL值且DISTINCT选项不能在此使用
expression:指定需要统计的列的名称,此列必须包含与SELECT列表中,且不能使用别名.
COMPUTE子句中也不能使用TEXT、NTEXT和IMAGE数据类型
BY expression:在查询结果中生成分类统计的行.如果使用此选项,则必须使用ORDER BY子句.expression是对应的ORDER BY子句中的order_by_expression的子集或全集
例:
select 员工姓名,所属部门,工资 from 员工数据表 order by 所属部门 compute sum(工资) by 所属部门
注意:在加入by关键字及其分组字段的同时必须将这个分组字段同时作为排序条件,否则查询会出错
UNION子句
合并两个表的列是不通的,使用UNION操作符合并查询结果需要遵循两个基本原则:列的书面和列的顺序在所有查询中必须是一致的;数据类型必须兼容
注意:
1.使用UNION子句获得的结果集的字段名称与UNION运算符之前的select语句结果集中的字段名相同
2.在默认情况下,UNION运算符将从最终结果集中删除重复的记录.如果希望最终结果集保留所有的记录,则必须使用ALL关键字
3.在使用UNION运算符时,单独的select语句中不能包含其自己的order by或compute子句
4.只能在最后一个select语句的后面使用一个order by或compute子句,此时,该子句将适用于最终的组合结果集
5.若需要对查询结果进行分组以及在分组后对几个使用having子句进行过滤,则必须在单独的select语句中指定group by和having子句
交叉联接
格式:数据表1 cross jion 数据表2
数据表1和数据表2的笛卡尔乘积
多值比较ALL
多值比较:多行一列
父查询与多值子查询之间的比较需用ALL来连接
标量值s比子查询返回集R中的每个都大时,s>ALL R为True
ALL表示所有
>ALL、<ALL、<=ALL、>=ALL、<>ALL
<>ALL等价于not in
例如:找出年龄最小的学生
select * from student where sage< all (slect sage from student)
多值比较Some/Any
父查询于多值子查询之间的编校需用Some/Any来连接
标量值s比子查询返回集R中的某一个都大时
s>Some R为True 或
S>Any R为True
>some、<some、<=some、>=some、<>some
=some等价于in、<>some不等价于not in
例如:找出不是最小年龄的学生
select * from student where sage>some (select dage fromstudent)
子查询----存在判断Exists
Exists + 子查询用来判断该子查询是否返回元组
例如:列出选修了CO1课程的学生的学号、姓名
select sno,sname from student where exists (select * from SC where SC.sno=student.sno and cno = 'CO1')