8_mysql查询之其它子句

  1. GROUP BY子句

GROUP BY子句主要用于根据字段对行分组。通常和聚合函数一起使用

举例一:将xscj数据库中各专业名输出。

select 专业名
    from xs
    group by 专业名;

举例二:求xscj数据库中各专业的学生数。

select 专业名,count(*) as '学生数'   
    from xs
    group by 专业名;

举例三:求被选修的各门课程的平均成绩和选修该课程的人数。

select 课程号, avg(成绩) as '平均成绩' ,count(学号) as'选修人数'    
    from xs_kc
    group by 课程号;

举例四:在xscj数据库上产生一个结果集,包括每个专业的男生人数、女生人数、总人数,以及学生总人数。
注意:使用带rollup操作符的group by子句,指定在结果集内不仅包含由group by提供的正常行,还包含汇总行。

select 专业名, 性别, count(*) as '人数'
   from xs
   group by 专业名,性别
   with  rollup;

举例五:在xscj数据库上产生一个结果集,包括每门课程各专业的平均成绩、每门课程的总平均成绩和所有课程的总平均成绩。

select 课程名, 专业名, avg(成绩) as '平均成绩'
    from xs_kc, kc,xs
    where xs_kc.课程号 = kc.课程号 and xs_kc.学号 = xs.学号
    group by 课程名, 专业名
    with rollup;

  1. HAVING 子句

使用having子句的目的与where子句类似,不同的是where子句是用来在from子句后面之后选择行,而having子句是用来在group by子句后选择行!

举例:查找通信工程专业平均成绩在85分以上的学生的学号和平均成绩。
子查询=>where结果集=>分组

select 学号,avg(成绩) as '平均成绩'
   from xs_kc
   where 学号 in 
         (  select 学号
               from xs
               where 专业名 = '通信工程'          )
   group by 学号
   having avg(成绩) >=85;

  1. ORDER BY子句

排序 关键字ASC表示升序排列,DESC表示降序排列,系统默认值为ASC。
举例一:将计算机专业学生的“计算机基础”课程成绩按降序排列。

select 姓名,课程名,成绩     
    from xs,kc,xs_kc
    where  xs.学号= xs_kc.学号 
        and  xs_kc.课程号= kc.课程号 
        and  课程名= '计算机基础'  
        and  专业名= '计算机'
    order by 成绩 desc;

举例二:将计算机专业学生按其平均成绩排列。

select  学号, 姓名, 专业名
    from xs 
    where  专业名= '计算机' 
    order by ( select avg(成绩)
                     from xs_kc
                     group by xs_kc.学号
                     having xs.学号=xs_kc.学号
               );

  1. LIMIT子句

LIMIT子句,主要用于限制被SELECT语句返回的行数。

举例:查找xs表中从第4位同学开始的5位学生的信息。

select 学号, 姓名, 专业名, 性别, 出生日期, 总学分
    from xs
    order by 学号
    limit 3, 5;

  1. UNION子句

使用UNION语句,可以把来自许多SELECT语句的结果组合到一个结果集合中。
举例:查找学号为081101和学号为081210的两位同学的信息。

select 学号, 姓名, 专业名, 性别, 出生日期, 总学分
    from xs
    where 学号= '081101'
    union
    select 学号, 姓名, 专业名, 性别, 出生日期, 总学分
        from xs
        where 学号= '081210';

你可能感兴趣的:(8_mysql查询之其它子句)