SQL题面试题

news2024/9/21 22:29:54

有3个表S(学生表),C(课程表),SC(学生选课表)

        S(SNO,SNAME)代表(学号,姓名)

        C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)

        SC(SNO,CNO,SCGRADE)代表(学号,课号,成绩)

问题:

        1,找出没选过“黎明”老师的所有学生姓名。

        2,列出2门以上(含2门)不及格学生姓名及平均成绩。

        3,即学过1号课程又学过2号课所有学生的姓名。

        请用标准SQL语言写出答案

相应建表SQL语句:

CREATE TABLE SC(

        SNO VARCHAR(200),

        CNO VARCHAR(200),

        SCGRADE VARCHAR(200)

);

CREATE TABLE S(

        SNO VARCHAR(200 ),

        SNAME VARCHAR(200)

);

CREATE TABLE C(

        CNO VARCHAR(200),

        CNAME VARCHAR(200),

        CTEACHER VARCHAR(200)

);

INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( '1', '语文', '张');

INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( '2', '政治', '王');

INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( '3', '英语', '李');

INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( '4', '数学', '赵');

INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( '5', '物理', '黎明');

commit;

INSERT INTO S ( SNO, SNAME ) VALUES ( '1', '学生1');

INSERT INTO S ( SNO, SNAME ) VALUES ( '2', '学生2');

INSERT INTO S ( SNO, SNAME ) VALUES ( '3', '学生3');

INSERT INTO S ( SNO, SNAME ) VALUES ( '4', '学生4');

commit;

INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( '1', '1', '40');

INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( '1', '2', '30');

INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( '1', '3', '20');

INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( '1', '4', '80');

INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( '1', '5', '60');

INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( '2', '1', '60');

INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( '2', '2', '60');

INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( '2', '3', '60');

INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( '2', '4', '60');

INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( '2', '5', '40');

INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( '3', '1', '60');

INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( '3', '3', '80');

commit;

三张表的内容展示如下: 

问题1.找出没选过“黎明”老师的所有学生姓名。

        第一步:查询'黎明'教师的课程编号

        SELECT CNO FROM C WHERE CTEACHER = '黎明';

                

        第二步:查询所有选过黎明教师课程的学生       

        SELECT

                S.SNAME

        FROM

                S

        LEFT JOIN

                SC

        ON

                S.SNO = SC.SNO

        WHERE

                SC.CNO = (SELECT CNO FROM C WHERE CTEACHER = '黎明');

                 

        第三步:查询没有选过'黎明'老师的所有学生

        SELECT

                SNAME

        FROM

                S

        WHERE

                SNAME NOT IN (SELECT S.SNAME FROM S LEFT JOIN SC ON S.SNO = SC.SNO WHERE SC.CNO = (SELECT CNO FROM C WHERE CTEACHER = '黎明'));

                

问题2:列出2门以上(含2门)不及格学生姓名及平均成绩。

第一步:查询2门及2门以上不及格的学生

SELECT

        S.SNO,S.SNAME,COUNT(SC.SCGRADE)

FROM

        SC

JOIN

        S 

ON

        SC.SNO = S.SNO

WHERE 

        SC.SCGRADE < 60

GROUP BY

        SC.SNO

HAVING

        COUNT(SC.SCGRADE) >= 2;

        

第二步:求成绩的平均值

SELECT

        SNO,AVG(SCGRADE) AVGSCGRADE

FROM

        SC

GROUP BY

        SNO;

         

第三步:将第一步查询结果作为临时表t1,将第二步查询结果作为临时表t2,进行连接查询

SELECT

        t1.*,t2.AVGSCGRADE

FROM

        (SELECT B.SNO,B.SNAME,COUNT(A.SCGRADE) FROM SC A JOIN S B ON A.SNO = B.SNO WHERE  A.SCGRADE < 60 GROUP BY A.SNO HAVING COUNT(A.SCGRADE) >= 2) t1

JOIN

        (SELECT SNO,AVG(SCGRADE) AVGSCGRADE FROM SC GROUP BY SNO) t2

ON

        t1.SNO = t2.SNO;

        

问题3:即学过1号课程又学过2号课所有学生的姓名。

第一步:查询选过1号课程的学生

SELECT S.SNO,S.SNAME FROM SC JOIN S ON SC.SNO = S.SNO WHERE CNO = 1;

        

第二步:查询选过2号课程的学生

SELECT S.SNO,S.SNAME FROM SC JOIN S ON SC.SNO = S.SNO WHERE CNO = 2;

         

第三步:两表连接查询得到即选过1号课程又选过2号课程的学生

SELECT

        T1.SNO,T1.SNAME

FROM

        (SELECT S.SNO,S.SNAME FROM SC JOIN S ON SC.SNO = S.SNO WHERE CNO = 1) T1

JOIN

        (SELECT S.SNO,S.SNAME FROM SC JOIN S ON SC.SNO = S.SNO WHERE CNO = 2) T2

ON

        T1.SNO = T2.SNO;

         

说明:用红色字体显示的SQL语句是将前面几步的SQL语句全部包括在内的完整SQL语句。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/172080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL同时在线问题的解法

前言 同时在线相关的问题&#xff0c;在很多行业中也经常出现&#xff0c;比如&#xff1a; 统计同时最大主播数量统计同时最大在线人数统计同时最大打车人数… 很多人看到这类题&#xff0c;一脸懵逼&#xff0c;甚至连题意都看不懂&#xff0c;但是这道题是面试题中的常客&a…

SAP FICO CO-PA(获利分析会计)简介

一、概念信息 1、目标 CO-PA的目标&#xff1a;确定市场段的获利能力。 其中市场段就是一些指标的组合&#xff0c;比如客户A&#xff0c;加上产品&#xff11;就可以是一个获利分析段。 分析各个获利分析段的贡献边际&#xff0c;为后续销售决策提供支持&#xff08;主要与…

4、PyCharm中配置PyQt5-tools

1、 配置Qt Designer Workint directory&#xff1a;$FileDir$ 2、配置PyUIC Arguments&#xff1a;$FileName$ -o $FileNameWithoutExtension$.py Workint directory&#xff1a;$FileDir$ 3、配置PyRcc Arguments&#xff1a;$FileName$ -o $FileNameWithoutExtension$_rc.…

Linux常用命令——time命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) time 统计给定命令所花费的总时间 补充说明 time命令用于统计给定命令所花费的总时间。 语法 time(参数)参数 指令&#xff1a;指定需要运行的额指令及其参数。 实例 当测试一个程序或比较不同算法时&…

【进阶】Spring Boot配置文件(.properties提示有问题版)

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、配置文件作用二、配置文件的格式三、properties配置文件说明1. properties 基本语法2. 读取配置文件3. properties缺点分析四、 yml配置文件说明1. yml基本语法2. yml使用进阶3. 注意&#xff1a;value值加单双引…

即时通讯开发之TCP 交互数据流、成块数据流

目前建立在 TCP 协议上的网络协议特别多,有 telnet,ssh,有 ftp,有 http 等等。 这些协议又可以根据数据吞吐量来大致分成两大类: 交互数据类型&#xff1a;例如 telnet,ssh,这种类型的协议在大多数情况下只是做小流量的数据交换,比如说按一下键盘,回显一些文 字等等。 数据…

【JavaScript】常见的事件(鼠标、键盘、表单等)

&#x1f4bb;【JavaScript】常见的事件 &#x1f3e0;专栏&#xff1a;JavaScript &#x1f440;个人主页&#xff1a;繁星学编程&#x1f341; &#x1f9d1;个人简介&#xff1a;一个不断提高自我的平凡人&#x1f680; &#x1f50a;分享方向&#xff1a;目前主攻前端&…

Xilinx 7系列FPGA之Artix-7产品简介

数字化革命改变了对新手和有丰富经验的 FPGA 设计人员的期望。为了在航空航天和国防、通信基础设施、医疗、工业和消费电子等对成本敏感的市场中竞争&#xff0c;需要在广泛的密度范围内提供强大的高性能功能组合。在不牺牲性能的情况下&#xff0c;开发人员必须能够扩展使用模…

python和netlogo软件模拟病毒传播仿真模型(一)

目前国内在网络舆情仿真建模中所使用的仿真平台主要有 Netlogo、Anylogic、Matlab、Vensim 等&#xff0c;netlogo软件是一款比较通用的。 但是他是由logo语言构成&#xff0c;语言逻辑很让人抓马。 这里python 中的mesa可以实现其中一部分&#xff0c;这里看一下病毒传播仿真模…

WPF 笔记3——在XAML中给对象属性赋值

看B站刘铁猛老师视频学习WPF XAML语言是从xml文件派生而来&#xff0c;是声明式语言&#xff0c;一个标签就表示声明了一个对象。 对象的值可以存储在对象的字段中&#xff0c;也可存储在对象的属性中&#xff1b; 通过给对象的属性赋值&#xff0c;可以在赋值时检查值的合法…

Redis6学习笔记【part2】基本数据类型与常用命令

一.单线程多路IO复用技术 Redis是单线程多路IO复用技术。多路复用是指使用一个线程来检查多个文件描述符&#xff08;Socket&#xff09;的就绪状态&#xff0c;比如调用 select 和 poll 函数&#xff0c;传入多个文件描述符&#xff0c;如果有一个文件描述符就绪&#xff0c;则…

【make、makefile】

前言 打怪升级第&#xff1a;26天 | make、Makefile make是一条命令&#xff0c;Makefile是一个文件&#xff0c; make是一个命令工具&#xff0c;是一个解释Makefile文件中指令的命令工具。 makefile是一个围绕依赖关系和依赖方法构造的一个自动化编程工具&#xff0c; 一个…

博客部署教程

1:安装Docker yum install -y yum-utils device-mapper-persistent-data lvm2 //安装必要工具yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //设置yum源yum install -y docker-ce //下载dockersystemctl start docker //启…

excel函数技巧:两个查询函数的用法比较 下篇

VLOOKUP和LOOKUP这对高频函数的较量注定是场持久战。在前两个回合的较量中&#xff0c;VLOOKUP占据上风&#xff0c;此番更要乘胜追击。新一轮较量&#xff0c;即刻开战&#xff01;***ROUND 03 交叉查询什么是交叉查询&#xff1f;我们可以通过一个查找值查找多个字段。如果被…

Android 深入系统完全讲解(26)

AudioTrack 构造过程 每一个音频流对应着一个 AudioTrack 类的一个实例&#xff0c;每个 AudioTrack 会在创建时注册到 AudioFlinger 中&#xff0c;由 AudioFlinger 把所有的 AudioTrack 进行混合&#xff08;Mixer&#xff09;&#xff0c;然后输送到 AudioHardware 中进行播…

spice auth过程分析

1、客户端选择认证方法 Client authentication method selection抓包分析{Authentication selected by client: Spice (1)}代码分析spice_channel_send_link(channel);if (!spice_channel_recv_link_hdr(channel) ||!spice_channel_recv_link_msg(channel) ||!spice_channel_re…

Allegro如何设计线圈操作指导

Allegro如何设计线圈操作指导 在做PCB设计的时候,在特殊场合时候需要设计线圈,Allegro支持快速设计出线圈,如下图 具体操作如下 选择File选择Change Editor

实现树莓派homeassistant OS远程控制内网穿透--ddnsto教程

一、两种穿透服务 1、molohub 一种是论坛提供的molohub&#xff0c;但是可能因为自己这边的网络原因在配置过程中一直无法连接到服务器&#xff0c;无法绑定github&#xff0c;因此放弃molohub的方法。如下图所示。molohub教程如下&#xff0c;不再赘述。 molohub的Github教程…

ejson4cpp——一个使用极致简单且性能可比rapidjson的C++json解析库

文章目录ejson4cpp快速开始要求安装与引入开始使用常见用法API介绍通过命名风格识别API宏定义FROM_JSON_FUNC&FROM_JSON_FRIEND_FUNCTO_JSON_FUNC&TO_JSON_FRIEND_FUNCAUTO_GEN_NON_INTRUSIVE&AUTO_GEN_INTRUSIVEENABLE_JSON_COUTFromJSON系列函数参数说明使用示例…

WireShark从入门到精通

一、什么是WireShark&#xff1f;Wireshark 是一个开源抓包工具或者叫网络嗅探器&#xff0c;用于分析网络流量和分析数据包。其实WireShark以前的名字不叫WireShark&#xff0c;以前都叫做Ethereal&#xff0c;于1998 年首次开发&#xff0c;直到 2006 年才改为 Wireshark。Wi…