• SQL基础练习题(mysql)


    MySQL练习题

    首先详细讲一下group by :

    概述:“group by” 就是根据“by”指定的规则对数据进行分组,所谓分组就是将一个“数据集”划分成若个个“小区域”,然后针对若干个“小区域”进行数据处理

    group by 与聚合函数 使用的比较多

    group by 语句中SELECT 指定的字段必须是“分组依据字段”,其他字段若想出现在select中则必须包括在聚合函数中,常见的聚合函数如下表: 

    Having与Where的区别

    • where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
    • having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。

    count(1)、count(*)与count(列名)的区别

        -- 当表的数据量大的时候,

    后面是练习题:

    练习题目:

    我们要用到4张表

    1. --1.学⽣表
    2. Student(SId,Sname,Sage,Ssex)
    3. --SId 学⽣编号,Sname 学⽣姓名,Sage 出⽣年⽉,Ssex 学⽣性别
    4. --2.课程表
    5. Course(CId,Cname,TId)
    6. --CId 课程编号,Cname 课程名称,TId 教师编号
    7. --3.教师表
    8. Teacher(TId,Tname)
    9. --TId 教师编号,Tname 教师姓名
    10. --4.成绩表
    11. SC(SId,CId,score)
    12. --SId 学⽣编号,CId 课程编号,score 分数
    1. -- 数据SQL
    2. -- 学⽣表 Student
    3. create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex
    4. varchar(10));
    5. insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
    6. insert into Student values('02' , '钱电' , '1990-12-21' , '男');
    7. insert into Student values('03' , '孙⻛' , '1990-12-20' , '男');
    8. insert into Student values('04' , '李云' , '1990-12-06' , '男');
    9. insert into Student values('05' , '周梅' , '1991-12-01' , '⼥');
    10. insert into Student values('06' , '吴兰' , '1992-01-01' , '⼥');
    11. insert into Student values('07' , '郑⽵' , '1989-01-01' , '⼥');
    12. insert into Student values('09' , '张三' , '2017-12-20' , '⼥');
    13. insert into Student values('10' , '李四' , '2017-12-25' , '⼥');
    14. insert into Student values('11' , '李四' , '2012-06-06' , '⼥');
    15. insert into Student values('12' , '赵六' , '2013-06-13' , '⼥');
    16. insert into Student values('13' , '孙七' , '2014-06-01' , '⼥');
    17. -- 科⽬表 Course
    18. create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10));
    19. insert into Course values('01' , '语⽂' , '02');
    20. insert into Course values('02' , '数学' , '01');
    21. insert into Course values('03' , '英语' , '03');
    22. -- 教师表 Teacher
    23. create table Teacher(TId varchar(10),Tname varchar(10));
    24. insert into Teacher values('01' , '张三');
    25. insert into Teacher values('02' , '李四');
    26. insert into Teacher values('03' , '王五');
    27. -- 成绩表 SC
    28. create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));
    29. insert into SC values('01' , '01' , 80);
    30. insert into SC values('01' , '02' , 90);
    31. insert into SC values('01' , '03' , 99);
    32. insert into SC values('02' , '01' , 70);
    33. insert into SC values('02' , '02' , 60);
    34. insert into SC values('02' , '03' , 80);
    35. insert into SC values('03' , '01' , 80);
    36. insert into SC values('03' , '02' , 80);
    37. insert into SC values('03' , '03' , 80);
    38. insert into SC values('04' , '01' , 50);
    39. insert into SC values('04' , '02' , 30);
    40. insert into SC values('04' , '03' , 20);
    41. insert into SC values('05' , '01' , 76);
    42. insert into SC values('05' , '02' , 87);
    43. insert into SC values('06' , '01' , 31);
    44. insert into SC values('06' , '03' , 34);
    45. insert into SC values('07' , '02' , 89);
    46. insert into SC values('07' , '03' , 98);
    1. #. 查询报物理课程的学生人数
    2. SELECT count(*) from  student as stu right JOIN 
    3. (SELECT studentNo from result where subjectNo=1 )t ON stu.studentNo = t.studentNo;
    4. #.查询男生、女生人数
    5. SELECT count(1)  from student where sex ='男' 
    6. union 
    7. SELECT count(1)  from student where sex ='女' 
    8. #. 查询至少有一门课与"袋鼠"同学所学相同的同学的信息
    9. SELECT * from student where studentNo in (
    10. SELECT DISTINCT studentNo from result where subjectNo = (SELECT DISTINCT subjectNo  from result where result.studentNo =(
    11. SELECT stu.studentNo from student stu where stu.studentName ='袋鼠'
    12. )));
    13. #.查询每个科目最高分的学生(无最高分的并列情况)
    14. SELECT * from student RIGHT JOIN(
    15. SELECT subjectNo,max(res.studentResule) from result res GROUP BY subjectNo)t ON student.studentNo = t.subjectNo;

    注意:因为在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。

    group by语句中select指定的字段必须是“分组依据字段”,其他字段若想出现在select中则必须包含在聚合函数中,常见的聚合函数如下表:

    函数作用支持性
    sum(列名)求和
    max(列名)最大值
    min(列名)最小值
    avg(列名)平均值
    first(列名)第一条记录仅Access支持
    last(列名)最后一条记录仅Access支持
    count(列名)统计记录数注意和count(*)的区别

    文章存在不足的地方 欢迎指出。

  • 相关阅读:
    化学分子Mol2文件格式与使用注意事项
    cpe(通用平台枚举)命名规范及python CPE库实战
    阿里云冯诗淳:ACK容器服务生产及可观测体系的建设与实践
    vue项目中进行svg图标组件封装及配置(全局引入)
    MYSQL的日志管理
    【ARMv9 DSU-120 系列 6.1 -- PPU power and reset control】
    在JAVA中intValue()、parseInt()、valueOf()的区别
    报表工具应该具备哪些特性?_光点科技
    Fiddler简单使用手册
    Java:软件开发中最流行的Java框架是什么?
  • 原文地址:https://blog.csdn.net/s_sos0/article/details/122024826