码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SQL经典练习题(下)


    目录

    前言

    1、数据表介绍

    2、初始化(创建表并插入测试数据)

    SQL习题

    1、统计各科成绩>=70 de 人数:课程编号,课程名称, 人数及所占百分比

    2、查询各科成绩前三名的记录

    3、查询每门课程被选修的学生数

    4、查询出只选修两门课程的学生学号和姓名

    5、查询男生女生人数

    6、查询名字中含有「风」字的学生信息

    7、查询同名学生名单,并统计同名人数

    8、查询 1990 年出生的学生名单

    9、查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列

    10、查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩

    11、查询课程名称为「数学」,且分数低于 60 的学生姓名和分数

    12、查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况)

    13、查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数

    14、查询不及格的课程

    15、查询课程编号为 01 且课程成绩在 80(含80) 分以上的学生的学号和姓名

    16、求每门课程的学生人数

    17、查询选修「张老师」所授课程的学生中,成绩最高的学生信息及其成绩

    18、查询不同课程 但成绩相同的 学生的学生编号、课程编号、学生成绩

    19、查询每门功课成绩最好的前两名

    20、统计每门课程的学生选修人数(超过 5 人的课程才统计)

    21、检索至少选修三门课程的学生的学生信息

    24、按照出生日期来算

    25、查询本周过生日的学生

    实验小结

    1、to_char(datetime/interval [, fmt]) 函数

    2、获取系统当前的时间(日期)

    3、TIMESTAMPDIFF 函数

    4、age函数

    5、EXTRACT函数


    前言

    数据库方向的研究和开发大致可以分为三个方向:一是数据库内核开发(自研等)、二是数据库系统管理(类似DBA的角色)、三是数据库应用开发(业务+SQL)。 内核开发可能需要有钻研创新的能力,比如一些数据库产品本身的自研工作等;DBA可能需要有系统架构、实施经验、以及整体管理的解决方案能力;应用开发则需要具有将业务快速转换成SQL的实现能力。所以说,以上三点纵贯“数据库的整个生命周期” 。

    本文将在上一篇《SQL经典练习题(上)》 的基础上继续练习。 因为SQL的学习途径之一就是练习,俗话说,熟能生巧嘛!

    1、数据表介绍

    • --学生表:Student(SId,Sname,Sage,Ssex)

    --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别

    • --课程表:Course(CId,Cname,TeId)

    --CId 课程编号,Cname 课程名称,TId 教师编号

    • --教师表Teacher(TeId,Tname)

    --TId 教师编号,Tname 教师姓名

    • --成绩表:SC(SId,CId,score)

    --SId 学生编号,CId 课程编号,score 分数

    2、初始化(创建表并插入测试数据)

    学生表Student

    1. create table Student(SId varchar(10),Sname varchar(10),Sbirthday date,Ssex varchar(10));
    2. insert into Student values('01' , '赵雷' , date '1990-01-01' , '男');
    3. insert into Student values('02' , '钱电' , date '1990-12-21' , '男');
    4. insert into Student values('03' , '孙风' , date '1990-12-20' , '男');
    5. insert into Student values('04' , '李云' , date '1990-12-06' , '男');
    6. insert into Student values('05' , '周梅' , date '1991-12-01' , '女');
    7. insert into Student values('06' , '吴兰' , date '1992-01-01' , '女');
    8. insert into Student values('07' , '郑竹' , date '1989-01-01' , '女');
    9. insert into Student values('09' , '张三' , date '2017-12-20' , '女');
    10. insert into Student values('10' , '李四' , date '2017-12-25' , '女');
    11. insert into Student values('11' , '李四' , date '2012-06-06' , '女');
    12. insert into Student values('12' , '赵六' , date '2013-06-13' , '女');
    13. insert into Student values('13' , '孙七' , date '2014-06-01' , '女');

    课程表 Course

    1. create table Course(CId varchar(10),Cname varchar(10),TeId varchar(10));
    2. insert into Course values('01' , '语文' , '02');
    3. insert into Course values('02' , '数学' , '01');
    4. insert into Course values('03' , '英语' , '03');

    教师表 Teacher

    1. create table Teacher(Teid varchar(10),Tname varchar(10));
    2. insert into Teacher values('01' , '张老师');
    3. insert into Teacher values('02' , '李老师');
    4. insert into Teacher values('03' , '王老师');

    成绩表 SC

    1. create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));
    2. insert into SC values('01' , '01' , 80);
    3. insert into SC values('01' , '02' , 90);
    4. insert into SC values('01' , '03' , 99);
    5. insert into SC values('02' , '01' , 70);
    6. insert into SC values('02' , '02' , 60);
    7. insert into SC values('02' , '03' , 80);
    8. insert into SC values('03' , '01' , 80);
    9. insert into SC values('03' , '02' , 80);
    10. insert into SC values('03' , '03' , 80);
    11. insert into SC values('04' , '01' , 50);
    12. insert into SC values('04' , '02' , 30);
    13. insert into SC values('04' , '03' , 20);
    14. insert into SC values('05' , '01' , 76);
    15. insert into SC values('05' , '02' , 87);
    16. insert into SC values('06' , '01' , 31);
    17. insert into SC values('06' , '03' , 34);
    18. insert into SC values('07' , '02' , 89);
    19. insert into SC values('07' , '03' , 98);

    SQL习题

    1、统计各科成绩>=70 de 人数:课程编号,课程名称, 人数及所占百分比

    2、查询各科成绩前三名的记录

    3、查询每门课程被选修的学生数

    4、查询出只选修两门课程的学生学号和姓名

    5、查询男生女生人数

    6、查询名字中含有「风」字的学生信息

    7、查询同名学生名单,并统计同名人数

    8、查询 1990 年出生的学生名单

    9、查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列

    10、查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩

    11、查询课程名称为「数学」,且分数低于 60 的学生姓名和分数

    12、查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况)

    13、查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数

    14、查询不及格的课程

    15、查询课程编号为 01 且课程成绩在 80(含80) 分以上的学生的学号和姓名

    16、求每门课程的学生人数

    17、查询选修「张老师」所授课程的学生中,成绩最高的学生信息及其成绩

    18、查询不同课程 但成绩相同的 学生的学生编号、课程编号、学生成绩

    19、查询每门功课成绩最好的前两名

    20、统计每门课程的学生选修人数(超过 5 人的课程才统计)

    21、检索至少选修三门课程的学生的学生信息

    22、查询选修了全部课程的学生信息

    23、查询各学生的年龄,只按年份来算

    24、按照出生日期来算

    25、查询本周过生日的学生

    实验小结

    根据上文的测试过程, 如下整理了一些openGauss数据库相关的函数:

    1、to_char(datetime/interval [, fmt]) 函数

    描述:将一个DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE或者TIMESTAMP WITH LOCAL TIME ZONE类型的DATETIME或者INTERVAL值按照fmt指定的格式转换为VARCHAR类型。

    1. 可选参数fmt可以为以下几类:日期、时间、星期、季度和世纪。每类都可以有不同的模板,模板之间可以合理组合,常见的模板有:HH、MI、SS、YYYY、MM、DD。
    2. 模板可以有修饰词,常用的修饰词是FM,可以用来抑制前导的零或尾随的空白。

    返回值类型:varchar

    2、获取系统当前的时间(日期)

    1. clock_timestamp() ,描述:实时时钟的当前时间戳。返回值类型:timestamp with time zone
    2. current_date, 描述:当前日期。返回值类型:date
    3. current_time,描述:当前时间。返回值类型:time with time zone
    4. current_timestamp ,描述:当前日期及时间。返回值类型:timestamp with time zone
    5. pg_systimestamp() , 描述:当前日期及时间。返回值类型:timestamp with time zone
    6. localtime,描述:当前时间。返回值类型:time
    7. localtimestamp,描述:当前日期及时间。返回值类型:timestamp
    8. now(),描述:当前日期及时间。返回值类型:timestamp with time zone
    9. timenow,描述:当前日期及时间。返回值类型:timestamp with time zone

    3、TIMESTAMPDIFF 函数

    TIMESTAMPDIFF(unit , timestamp_expr1, timestamp_expr2)

    timestampdiff函数是计算两个日期时间之间(timestamp_expr2-timestamp_expr1)的差值,并以unit形式返回结果。timestamp_expr1,timestamp_expr2必须是一个timestamp、timestamptz、date类型的值表达式。unit表示的是两个日期差的单位。

    说明:该函数仅在openGauss兼容MY类型时(即dbcompatibility = 'B')有效,其他类型不支持该函数。(dbcompatibility的取值: A、B、C、PG ,具体对应是Oracle、MySql、Teradata、PostgreSql 数据库)

    4、age函数

    1. age(timestamp, timestamp),描述:将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负。 返回值类型:interval
    2. age(timestamp),描述:当前时间和参数相减。返回值类型:interval

    5、EXTRACT函数

    EXTRACT(field_ _FROM source),extract函数从日期或时间的数值里抽取子域,比如年、小时等。source必须是一个timestamp、time或interval类型的值表达式(类型为date的表达式转换为timestamp,因此也可以用)。field是一个标识符或者字符串,它指定从源数据中抽取的域。extract函数返回类型为double precision的数值。

    示例:

    openGauss: 一款高性能、高安全、高可靠的企业级开源关系型数据库。

    🍒如果您觉得博主的文章还不错或者有帮助的话,请关注一下博主,如果三连点赞评论收藏就更好啦!谢谢各位大佬给予的支持!

  • 相关阅读:
    QT-day3
    存储过程的简单使用以及Mybatis调用存储过程
    【Python合集系列】也许每个人的童年里都有过这样一个梦:“书桌会被推开钻出来一个哆啦A梦”。(源码合集)
    人工智能(AI)是一种快速发展的技术,其未来发展前景非常广阔。
    Springboot之SpringMVC相关(二)
    Kotlin中object关键字的作用
    MacOS设置JAVA_HOME环境变量
    【Linux】自动化构建工具--make/Makefile&&调试器--gdb的使用
    ArrayList原理
    【Docker 那些事儿】容器网络的 “梦华录”(上篇)
  • 原文地址:https://blog.csdn.net/GaussDB/article/details/127100774
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号