一.涉及空值的查询
如:
查询grade为空和不为空的学生信息:
SELECT * FROM SC1 WHERE grade IS NULL /* 查询成绩为空的学生信息 */
SELECT * FROM SC1 WHERE grade IS NOT NULL AND cno='002' /* 查询成绩不为空且选修了编号为002的课程的学生信息 */
二.ORDER BY 子句
ORDER BY子句可以按一个或多个属性列排序;
升序:ABS, 降序:DESC (默认为升序)
例如:
按grade降序排列:
GO
SELECT * FROM SC1 WHERE cno='001' ORDER BY grade DESC /* 将选修了001课程的学生按成绩降序排列 */
限制返回条数
SELECT * FROM student ORDER BY score ASC LIMIT 1, 2; /*跳过前一条数据,返回两条数据*/
SELECT * FROM student ORDER BY score ASC LIMIT 2 OFFSET 1; /*跳过前一条数据,返回两条数据*/
三.聚集函数
(1).统计元组个数(即总共有多少行):COUNT(*)
SELECT COUNT(*) FROM student1 /* 查询学生总人数 */
(2).查询某一列中值的个数:COUNT( [DISTINCT|ALL] <列名>)
SELECT COUNT(DISTINCT sno) FROM SC1 /*查询选修了课程的学生人数(去掉重复的)*/
(3).计算一列值的平均值:AVG( [DISTINCT|ALL] <列名>)
SELECT AVG(grade) FROM SC1 WHERE cno='002' /* 计算课程002的平均成绩 */
(4).计算一列值得总和:SUM( [DISTINCT|ALL] <列名>)
SELECT SUM(ccredit) FROM course1 /* 查询所有课程得学分总和 */
(5).计算某一列中得最大值和最小值:MAX( [DISTINCT|ALL] <列名>),MIN( [DISTINCT|ALL] <列名>)
SELECT MAX(grade) FROM SC1 WHERE cno='003' /* 查询选修了003号课程的最高分数 */
SELECT MIN(grade) FROM SC1 WHERE cno='003' /* 查询选修了003号课程的最低分数 */
四.GROUP BY子句
GROUP BY 子句用于分组,具体使用如下:
GO
SELECT cno,COUNT(sno) FROM SC1 GROUP BY cno /* 查询每门课程相应的选课人数 */
SELECT cno,COUNT(sno) FROM SC1 WHERE grade < 60 GROUP BY cno /* 统计每门课程的不及格人数,显示该课程号及该课程的不及格人数 */
SELECT sno,COUNT(*) FROM SC1 GROUP BY sno HAVING COUNT(*) > 1/* 查询选修了一门课程以上的学生信息,WHERE不能用聚集函数座位条件表达式,因此要用HAVING */