SQL,数据查询之单表查询,SELECT,WHERE, 聚集函数, GROUP BY, HAVING, ORDER BY

1. SELECT子句

对应于关系代数中的投影运算, 用以列出查询结果集中的期望属性, 目标列的形式为列名, *, 算数表达式, 聚合函数。

若要去除重复元组, 可以使用关键字distinct或unique来指明。
示例: select distinct sno from SC;

列的改名操作:old_name as new_name
示例: select sno as 学号, cno as 课程号, grade as 成绩 from SC;

2. WHERE 子句

查询满足指定条件的元组可以通过WHERE子句实现

字符串的匹配操作 like 用于找出满足给定匹配条件的字符串。
格式:列名 [not] like ‘字符串’

匹配规则:
‘%’ :匹配零个或多个字符。
’_’:匹配任意单个字符。
escape :定义转义字符,以去掉特殊字符的特定含义,使其被作为普通字符看待。
如escape ‘\’是定义了 \ 作为转义字符,则可用%去匹配%,用\_去匹配_,用\ \去匹配 \ 。

3. 聚集函数

为了进一步方便用户,增强检索功能,SQL提供了许多聚合函数,主要包括:

COUNT([DISTINCT|ALL] *) 统计元组个数
COUNT([DISTINCT|ALL] <列名>) 统计一列中值的个数
SUM([DISTINCT|ALL] <列名>) 计算一列值的总和(此列必须是数值型)
AVG([DISTINCT|ALL] <列名>) 计算一列值的平均值(此列必须是数值型)
MAX([DISTINCT|ALL] <列名>) 求一列值中的最大值
MIN([DISTINCT|ALL] <列名>) 求一列值中的最小值

示例1:求男学生的总人数和平均年龄

SELECT COUNT(*),AVG(SAGE) FROM Student
WHERE SSEX=‘男’

示例2:统计选修了课程的学生人数
SELECT COUNT(DISTINCT Sno) FROM SC

示例3:列出老师的最高、最低、平均工资。
select DNO,max(SAL),min(SAL),avg(SAL) from TEACHER

• Null在聚集函数中的角色
• Count 为 0
• 其余均忽略 Null
• Sum:不将其计入
• Avg:具有 Null 的元组不参与
• Max / Min:不参与

4. GROUP BY子句

GROUP BY子句可以将查询结果表的各行,按一列或多列取值相等的原则进行分组。
对查询结果分组的目的:是为了细化聚集函数的作用对象。
如果未对查询结果分组,聚集函数将作用于整个查询结果,即整个查询结果只有一个函数值。
如果用GROUP分了组,聚集函数将作用于每一个组,即每一组都有一个函数值。

示例:查询各个课程号以及相应的选课人数
SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno

5. HAVING 子句

跟在Group By子句的后面,有GROUP BY 才有HAVING
示例:列出选修两门(含)以上课程的学生的学号
SELECT sno
FROM SC GROUP BY sno
HAVING COUNT(cno)>=2

Having 与 Where的区别
Where 决定哪些元组被选择参加运算,作用于关系中的元组
Having 决定哪些分组符合要求,作用于分组
聚集函数的条件关系必须用Having,Where中不应出现聚集函数

6. ORDER BY 子句

order by 列名 [asc | desc]
ORDER BY 子句表示结果要排序,它必须在所有其它子句之后作为最后一个子句出现
示例:检索选修C1的学生学号和成绩,并按成绩的降序和学号的升序排列
SELECT Sno,GRADE FROM SC WHERE Cno=‘C1’
ORDER BY GRADE DESC,Sno;

猜你喜欢

转载自blog.csdn.net/qq_40212930/article/details/88700814