求一列中的最大值/最小值 MAX ( [DISTINCT | ALL] <列名> ) / MIN ( [DISTINCT | ALL] <列名> )
代码示例:
1 2 3 4 5 6 7 8 9 10
#查询学生总人数 SELECTCOUNT(*) FROM Student; #查询选修了课程的学生人数 SELECTCOUNT(DISTINCT Sno) FROM SC; #DISTINCT要写在括号里面 #计算1号课程的学生平均成绩 SELECTAVG(Grade) FROM SC WHERE Cno ='1'; #查询选修1号课程学生的最高分 SELECTMAX(Grade) FROM SC WHERE Cno ='1'; #查询学生201215012选修课程的总学分数 SELECTSUM(Ccredit) FROM SC, Course WHERE Sno ='201215012'AND SC.Cno = Course.Cno; #涉及多表查询
#查询计算机系全体学生名单 SELECT Sname FROM Student WHERE Sdept='CS'; #查询所有年龄在20以下的学生姓名及其年龄 SELECT Sname, Sage FROM Student WHERE Sage <20; #查询考试成绩不及格的所有学生学号 SELECTDISTINCT Sno FROM SC WHERE Grade NOT>60;
确定范围 BETWEEN ... AND ... / NOT BETWEEN ... AND ...
1 2 3 4
#查询年龄在20到23之间的学生姓名,院系,年龄(也包含20与23) SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN20AND23; #查询年龄不在20到23之间的学生姓名,院系,年龄(也排除20与23) SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOTBETWEEN20AND23;
确定集合 IN <值表> / NOT IN <值表>
1 2 3 4
#查询计算机系,数学系,信息系学生的姓名与性别 SELECT Sname, Ssex FROM Student WHERE Sdept IN ('CS', 'MA', 'IS'); #查询非计算机系,数学系,信息系学生的姓名与性别 SELECT Sname, Ssex FROM Student WHERE Sdept NOTIN ('CS', 'MA', 'IS');
字符匹配 [NOT] LIKE '<匹配串>' [ESCAPE '<转换码字符>']
1 2 3 4 5 6 7 8
#查询姓刘的学生的姓名,学号,性别 SELECT Sname, Sno, Ssex FROM Student WHERE Sname LIKE'刘%';#%代表任意数量字符,也包括0个 #查询姓刘且全名是三个字的学生的姓名,学号,性别 SELECT Sname, Sno, Ssex FROM Student WHERE Sname LIKE'刘____';#这里有四个_,代表2个汉字字符(1个汉字2个字符) #查询不姓刘的学生的姓名,学号,性别 SELECT Sname, Sno, Ssex FROM Student WHERE Sname NOTLIKE'刘%'; #查询DB_Design课程的课程号和学分(ESCAPE'\'表示\字符之后的一个字符不做转换,除了\也可以换成其他字符) SELECT Cno, Ccredit FROM Course WHERE Cname LIKE'DB\_Desgin'ESCAPE'\';
涉及空值的查询 IS NULL / IS NOT NULL
1 2
#查询缺少成绩的学生的学号和相应的课程号 SELECT Sno, Cno FROM SC WHERE Grade ISNULL; #IS不能用=代替
多重条件查询 AND / OR (AND的优先级高于OR, 可以用括号改变优先级)
1 2
#查询计算机系年龄在20以下的学生姓名 SELECT Sname FROM Student WHERE Sdept ='CS'AND Sage <20;
GROUP BY HAVING组合 (对结果集的输出限制,通常伴随使用聚集函数)
GROUP BY: 结果集的分组方式 (按照某列值分组,相同值为一组统计数量) ; HAVING: 只输出满足条件的结果 ;
该分组虚化聚集函数的作用对象:
如果未对查询结果分组,聚集函数将作用与整个查询结果
对结果集分组后,聚集函数将分别作用于每个组
按照指定的一列或多列值分组,值相等的为一组
代码示例:
1 2 3 4 5 6
#求每个课程号及相应的选课人数 SELECT Cno, COUNT(Sno) FROM SC GROUPBY Cno; #可以这么理解:先按照Cno分组,再对每个分组COUNT(Sno) #查询选修了3门以上课程的学生学号 SELECT Cno FROM SC GROUPBY Sno HAVINGCOUNT(*) >3; #查询平均成绩大于等于90的学生学号和平均成绩 SELECT Sno, AVG(Grade) FROM SC GROUPBY Sno HAVINGAVG(Grade) >90;
HAVING短语和WHERE子句的区别:
作用对象不同
WHERE子句作用于基表或视图,从中选择满足条条件的的元组
HAVING短语作用于组,从中选择满足条件的组.
ORDER BY组合 (对结果的排序)
ORDER BY: 结果集的排序方式 (ASC升序(缺省) / DESC降序). 对于空值的排序,由系统具体的实现决定.