首页 > 数据库 >SQL--每日两道sql题,天天健康好身体

SQL--每日两道sql题,天天健康好身体

时间:2023-05-15 21:55:10浏览次数:32  
标签:join 课程 SQL -- sid score sql table select

每天会在网上找两三道sql题练习练习,提高自己的sql语句的使用能力(先自己思考出答案,再和别人的答案做一下对比,然后深入思考一下)

以下是四个表信息:

 

问题1、查询所有同学的学号,姓名,选课数,总成绩

答案1: select sid, sname,table2.zongchengji,table2.xuankeshu from student_info_table left join (select sid, count(score) as zongchengji, count(cid) as xuankeshu from grade_table group by sid)  table2 on student_info_table.sid=table2.sid

思考:一开始想的是用inner join,  别人的答案用的是left join, 想一想感觉left join更合适,原因是grade_table中记录的都是选了课程的学生的课程考试是信息,假如aa学生一门课都没有选的话。那使用inner join 进查询出来的结果,是不会有aa 这个同学的信息

,但如果使用left join进行查询的话,查询结果中,会有aa的数据,不过,此数据中的zongchengji, xuankeshu 两个字段的值是空置。

 

问题2、查询编号100课程比101课程成绩高的所有的学生的学号

答案2:select A.sid from  ( select sid,score as 100_score from grade_table where cid=100  ) A  ,  ( select sid,score as 101_score from grade_table where cid=101 ) B  where  A.sid=B.sid and A.100_score > B.101_score

思考:这个问题主要是同一个学生下,两个不同课程的成绩的比较,而且还是,每个学生都要查出来,一开始想的是对学生进行分组,但是分组怎么搞都搞不出来结果,后来想到的思路: 每个学生的100课程的分数和和101课程分数拼成一行数据不就可以进行比较了么,即查出来所有100的课程的成绩信息作为一个表A, 查出来所有101课程的成绩信息作为表B, 然后将表A 和表B 进行表连起来进行条件筛选查询(筛选的就是A.100_score > B.101_score, 这里也不需要进行学生分组了)

其实 A B表也可以使用inner join  on  进行查询

 

问题3、查询学生信息,女生按照年龄升序排序,男生按照年龄降序排序

答案3:select * from student_info_table ordery by case when ssex="女"  then sage desc  else sage asc;

思考:这个主要是使用的 case when 方法,记住这个方法就可以,没有其他思考了

 

标签:join,课程,SQL,--,sid,score,sql,table,select
From: https://www.cnblogs.com/ccnn9/p/17401473.html

相关文章

  • C基础笔记(字符串)
    字符串strlen计算字符串长度:strlen(s1);返回字符串s1的长度。strcat字符串相连: strcat(s1,s2);  连接字符串s2到字符串s1的末尾。strcmp字符串比较    strcmp(s1,s2);如果s1和s2是相同的,则返回1;如果s1<s2则返回小于0;如......
  • HCI的流控
    1.对controler的数据(acl、sco)流控:避免controler的数据bufferoverrunhost发送HCI_Read_Buffer_Size命令读取controler的数据buffer能力当host向controler发送了多包数据controler发送HCI_Number_Of_Completed_Packets事件告诉host处理了几包数据,还能接受几包数据2.......
  • Python数据库篇:sqlite3、mysql、sqlalchemy
    一:sqlite3importsqlite3conn=sqlite3.connect("test.db")cursor=conn.cursor()cursor.execute("createtableuser(idvarchar(20)primarykey,namevarchar(20))")cursor.execute("insertintouser(id,name)values(\'1\�......
  • Python自动化测试篇:Selenium
    所谓自动糊测试就是用程序模拟用户在浏览器上的操作,可以通过程序实现在文本框中自动输入内容,点击按钮等操作。一:安装chromedriverhttps://chromedriver.storage.googleapis.com/index.html或者https://npm.taobao.org/mirrors/chromedriver/下载和自己的浏览器版本号一致的驱......
  • Python基础篇:简介
    一:简介1.1简介Python是一种用C语言编写的、现代化、弱类型(在声明变量时不需要显式指定数据类型)、脚本语言(解释执行:运行一句,解析一句,而不是编译执行,所以速度相对较慢)、动态语言(在程序运行时给对象绑定新的属性和方法),其特点是语法简洁、优雅、入门简单、应用场景广泛。语法简洁是......
  • Intellij Idea教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介IDEA全称IntelliJIDEA,是java编程语言的集成开发环境。IntelliJ在业界被公认为最好的Java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBra......
  • Python基础篇:日志logging
    一:日志级别CRITICAL=50FATAL=CRITICALERROR=40WARNING=30WARN=WARNINGINFO=20DEBUG=10NOTSET=0二:日志格式化https://docs.python.org/3/library/logging.html#logrecord-attributesAttributenameFormatDescriptionargsYoushouldn’tneedtoformatthis......
  • Netty高手必知必会的ChannelHandlerContext技巧
    1概述ChannelHandlerContext代表ChannelHandler和ChannelPipeline之间的关联,每当有ChannelHandler添加到ChannelPipeline,都会创建ChannelHandlerContext。1.1主要功能管理它所关联的ChannelHandler和在同一个ChannelPipeline中的其他ChannelHandler之间的交互。Ch......
  • 深入理解 python 虚拟机:多继承与 mro
    深入理解python虚拟机:多继承与mro在本篇文章当中将主要给大家介绍python当中的多继承和mro,通过介绍在多继承当中存在的问题就能够理解在cpython当中引入c3算法的原因了,从而能够帮助大家更好的了理解mro。python继承的问题继承是一种面向对象编程的概念,它可以让一......
  • 关于我
    关于作者hello......