1,聚合函数
SQL提供了下列聚合函数:
COUNT(*) 计算元组的个数
COUNT(<列名>) 对一列中的值计算个数
SUM (<列名>) 求某一列值的总和(此列的值必须时数值型)
AVG (<列名>) 求某一列值的平均值(此列的值必须时数值型)
MAX (<列名>) 求某一列的最大值
MIN (<列名>) 求某一列值的最小值
[例]对教学数据库中基本表T,C,S,SC的数据进行查询和计算.
(1)求男学生的总人数和平均年龄.
SELECT COUNT(*), AVG(AGE)
FROM S
WHERE SEX='M'
(2)统计选修了课程的学生人数.
SELECT COUNT (DISTINCT S#)
FROM SC;
此处关键字DISTINCT表示要去掉重复的S#值,否则查询结果中可能有重复的S#值
2.SELECT子句的规定
SELECT子句用于描述查询输出的表格结构,即输出值的列名或表达式 .其形式如下:
SELECT [ALL | DISTINCT] <列名或列表达式序列> | *
(1)DISTINCT选项保证重复的行从结果中去除;而ALL选项是默认的,将保证重复的行留在
结果中,一般就不必写出.
(2)星号*是对于在FROM子句中命名表中所有列的简写.
(3)列表达式是对于一个单列求聚合值的表达式
(4)允许表达式中出现包含+,-,*和/以及列名,常熟的算术表达式
[例]对基本表T,C,S,SC进行查询
(1)在基本表SC中检索男同学选修的课程的课程号
SELECT DISTINCT C#
FROM S,SC
WHERE S.S#=SC.S# AND SEX='M';
(2)检索每个学生的出生年份
SELECT S#,SNAME,2006-AGE
FROM S;
这里"2006-AGE"不是列名,而是一个表达式
[例]在基本表S中检索每个学生的姓名和出生年份,输出列名为STUDENT_NAME和BIRTH_YEAR
SELECT SNAME AS STUDENT_NAME,2006-AGE AS BIRTH_YEAR
FROM S;
在实际使用时,AS字样可省略
3.集合的并,交,差操作
当两个子查询结果的结构完全一致时,可以让这两个子查询执行并,交,差操作.并,交,差的
运算符为UNION,INTERSECT和EXCEPT.
( SELECT 查询语句1)
UNION [ALL]
(SELECT 查询语句2)
( SELECT 查询语句1)
INTERSECT [ALL]
(SELECT 查询语句2)
( SELECT 查询语句1)
EXCEPT [ALL]
(SELECT 查询语句2)上述操作中不带关键字ALL时,返回结果消除了重复元组,而带ALL时,返回结果中为消除重复元组
3,条件表达式中的比较操作
条件表达式可以用各种运算符组合而成.
(1)算术比较操作
条件表达式中可以出现算术比较运算符(<,<=,>,>=,=,!=),也可以用"BETWEEN...AND..."比较运算符限定一个值的
范围.
[例]在基本表S中检索18~20岁的学生姓名,可以用下列语句实现:
SELECT SNAME
FROM S
WHERE AGE>=18 AND AGE<=20;
若使用"BETWEEN...AND....",就更容易理解了:
SELECT SNAME
FROM S
WHERE AGE BETWEEN 18 AND 20;
类似地,不在某个范围可以使用"NOT BETWEEN.....AND...