SQL查询进阶

来源:互联网 发布:怎么检查网络连接状态 编辑:程序博客网 时间:2024/05/22 08:09

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
  • 如果选择的列表包含了表达式,则必须要为表达式指定别名