示例:查询比所有女生年龄都大的男生信息。
SELECT * FROM student WHERE ssex='M' AND sage>39;
SELECT sage FROM student WHERE ssex='F'; --21\25\39
SELECT * FROM student WHERE ssex='M' AND sage>ALL(SELECT sage FROM student WHERE ssex='F');
--等价于 SELECT *FROM student WHERE ssex='M' AND sage>21 AND sage>25 AND sage>39;
8)any: 就是用or来对表达式进行分解
--字段 > any(值1,值2,。。。,值N) 等价于: 字段>值1 or 字段>值2 or ... or 字段>值N。
示例:--查询比任一女生年龄都大的男生信息。
SELECT * FROM student WHERE ssex='M' AND sage>ANY(SELECT sage FROM student WHERE ssex='F');
4.聚合函数(分组函数/组函数)
常见的聚合函数有:count()\avg()\min()\max()\sum(), 括号里加字段或字段表达式。
示例:--查询男生的数量
SELECT count(*) FROM student WHERE ssex='M';
--查询有成绩的学生的数量
SELECT count(distinct sid) FROM score;
--查询女生的最小年龄
SELECT min(sage) FROM student WHERE ssex='F';
--查询某一位学生的平均成绩
SELECT avg(grade) FROM score WHERE sid='s0001';
--查询年龄最大的学生的姓名
SELECT* FROM student WHERE sage=(SELECT max(sage) FROM student);
5.分组查询
语法格式: group by 分组字段
作用:表示会将表格中所有的数据按照分组字段进行分组处理、分组字段的值相同的行会被合并为一条记录、即一组;分组字段以外的字段是无法再被独立查询,只能通过聚合函数来实现查询,分组字段可以是多个,用逗号分隔。
示例:--查询男生和女生的数量
SELECT ssex,COUNT(*) FROM student GROUP BY ssex;
--查询男生和女生的平均年龄、最大年龄、最小年龄
SELECT ssex,AVG(sage),MAX(sage),min(sage) FROM student GROUP BY ssex;
--查询每一门课程被选的数量
SELECT cid,COUNT(DISTINCT sid) FROM score GROUP BY cid;
注意:where是发生在分组之前,having是发生在分组之后,意味分组函数是不能直接作为条件的值出现在where之后,但是可以出现在having之后。
示例:--查询所有科目都及格的学生的sid。
SELECT sid FROM score WHERE grade>=60 GROUP BY sid; --错误的写法,实现的是任意科目及格的学生。
SELECT sid FROM score GROUP BY sid HAVING MIN(grade)>=60; --先按学生分组,设定条件每个学生的最低分要大于等于60.