1.SQL查询语句格式
select <*/express [as alias],...> from table [where condition(s)][group by expression,...][having condition(s)];
(1).通过使用group by子句,可以在表中达到将数据分组的目的。
例:按系部门及职称对teacher表进行分组
select * from teacher group by department_id,title
(2).通过使用group by子句,用于指定限制分组结果的条件
例:检索平均工资高于2200元的系部,显示系部门、平均工资。
select department_id,avg(wage)from teacher group by department_id having avg(wage) >2200;
2.列函数
- MAX(column) 列中的最大值
- MIN(column) 列中的最小值
- COUNT(*) 表中行的总数
- COUNT(column) 列不为null的行数
- COUNT(distinct column) 指定类中相异值得数量
- SUM(column) 列中所有值的总和
- AVG(column) 列中所有值的平均值
3.子查询
根据返回结果的不同,被分为单行子查询、多行子查询和多列子查询。
- 单行子查询:返回一行一列数据给外部的SQL语句
- 多行子查询:返回多行单列数据给外部的SQL语句
- 多列子查询:返回多列(单行或多行)数据给外部的SQL语句
(1)单行子查询,可以使用在主句的where,having,from子句中。
(2)多行子查询,必须要使用多行比较符in,any或all
- in:匹配子查询结果的任意一个值
- any:只要符合子查询结果的任意一个值
- all:必须要符合子查询结果的所有值
例:查询工资高于各部门平均工资的教师信息
select * from teacher where wage > all (select AVG(wage) from teacher group by department_id);
(3)多列子查询
例:在student表中检索与江威专业相同,生日相同的同学
select * from student where (specialty,birthday) = (select specialty,birthday from student where name='江威');
4.集合操作
集合操作有并、交、差3种运算。集合操作符分别为:UNION(UNION ALL)、INTERSECT和MINUS
- UNION:用于得到两个查询结果集的并集,并自动去掉重复行
- UNION ALL:得到两个查询结果集的并集,保留重复行
- INTERSECT:得到两个查询结果集的交集,交集以结果第一列进行排序
- MINUS:用于得到两个查询结果集的差集,以结果第一列进行排序
使用集合操作符的查询操作,语法格式:
select sentence1 [UNION | UNION ALL | INTERSECT | MINUS] select sentence2
注意:
- 要求参与集合操作的结果集列的个数和数据类型相匹配
- 对于BLOB,CLOB,BFILE,VARRAY或嵌套类型的列,不能使用集合操作符
- 对于LONG类型的列,不能使用集合操作符UNION、INTERSECT和MINUS
- 如果选择的列表包含了表达式,则必须要为表达式指定别名