结构化查询语言SQL(4)

示例:查询比所有女生年龄都大的男生信息。
         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.       

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a63f680df3ed49ca31e73cb7b79c9598.html