你与写的一手好sql的大佬可能就差这一道题!

简介: 你与写的一手好sql的大佬可能就差这一道题!

你与写的一手好sql的大佬可能就差这一道题!



1:建表语句

1.1:课程表
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `c`
-- ----------------------------
DROP TABLE IF EXISTS `c`;
CREATE TABLE `c` (
  `CNO` int(11) NOT NULL DEFAULT '0' COMMENT '课程号',
  `CNAME` varchar(11) DEFAULT NULL COMMENT '课程名称',
  `CTEACHER` varchar(11) DEFAULT NULL COMMENT '课程老师名称',
  PRIMARY KEY (`CNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of c
-- ----------------------------
INSERT INTO `c` VALUES ('1', '科学', '科学老师');
INSERT INTO `c` VALUES ('2', '编程', '编程老师');
INSERT INTO `c` VALUES ('3', '美术', '何炅老师');
1.2:学生表
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `s`
-- ----------------------------
DROP TABLE IF EXISTS `s`;
CREATE TABLE `s` (
  `SNO` int(11) NOT NULL DEFAULT '0' COMMENT '学号',
  `SNAME` varchar(11) DEFAULT NULL,
  `AGE` int(2) DEFAULT NULL,
  `SEX` int(1) DEFAULT NULL COMMENT '0-女 1-男',
  PRIMARY KEY (`SNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of s
-- ----------------------------
INSERT INTO `s` VALUES ('1', '张三', '1', '1');
INSERT INTO `s` VALUES ('2', '李四', '2', '1');
INSERT INTO `s` VALUES ('3', '小丽', '3', '0');
INSERT INTO `s` VALUES ('4', '小花', '4', '0');
INSERT INTO `s` VALUES ('5', '王二麻子', '5', '1');
1.3:学生和课程关系表
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `sc`
-- ----------------------------
DROP TABLE IF EXISTS `sc`;
CREATE TABLE `sc` (
  `SNO` int(11) DEFAULT NULL COMMENT '学号',
  `CNO` int(22) DEFAULT NULL COMMENT '课程号',
  `SCGRADE` decimal(11,2) DEFAULT NULL COMMENT '成绩'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of sc
-- ----------------------------
INSERT INTO `sc` VALUES ('1', '1', '70.00');
INSERT INTO `sc` VALUES ('1', '2', '56.00');
INSERT INTO `sc` VALUES ('1', '3', '90.00');
INSERT INTO `sc` VALUES ('2', '1', '2.00');
INSERT INTO `sc` VALUES ('2', '3', '70.00');
INSERT INTO `sc` VALUES ('3', '3', '60.00');
INSERT INTO `sc` VALUES ('4', '3', '90.00');
INSERT INTO `sc` VALUES ('2', '2', '56.00');
INSERT INTO `sc` VALUES ('3', '1', '45.00');
INSERT INTO `sc` VALUES ('3', '2', '12.00');
INSERT INTO `sc` VALUES ('4', '1', '22.00');
INSERT INTO `sc` VALUES ('4', '2', '55.00');
1.4:学生和课程关系拓展表
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `sc_c`
-- ----------------------------
DROP TABLE IF EXISTS `sc_c`;
CREATE TABLE `sc_c` (
  `CNO` int(11) NOT NULL DEFAULT '0',
  `CNAME` varchar(11) DEFAULT NULL,
  `AVG_GRADE` decimal(11,4) DEFAULT NULL,
  PRIMARY KEY (`CNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of sc_c
-- ----------------------------

2:题目

1:把SC表中每门课程的平均成绩插入到另外一个已经存在的表SC_C(CNO,CNAME,AVG_GRADE)中,其中AVG_GRADE表示每门课程的平均成绩
2:从SC表中把选择何炅老师的课程的女生的选课记录删除
3:查询选何炅老师的课程的女生且成绩在80分以上
4:找出没有选修过何炅老师的课程的所有学生的姓名(两种写法)
5:列出有两门以上(包含两门)不及格课程(成绩小于60分)的学生的姓名及其平均成绩(两种方式)   
6:列举出即学过1(科学)又学过2(编程)的所有学生姓名(两种方式)
7:列出1(科学)成绩比2(编程)的学生成绩高的所有学生的学号和姓名
8:列出1(科学)成绩比2(编程)的学生成绩高的所有学号及其1号课(科学)和2号课(编程)的成绩

3:参考答案

-- 1:把SC表中每门课程的平均成绩插入到另外一个已经存在的表SC_C(CNO,CNAME,AVG_GRADE)中,其中AVG_GRADE表示每门课程的平均成绩
INSERT INTO SC_C (CNO, CNAME, AVG_GRADE) SELECT
  SC.CNO,
  C.CNAME,
  AVG(SC.SCGRADE)
FROM
  `SC`
INNER JOIN C ON C.CNO = SC.CNO
GROUP BY
  SC.CNO;
-- 2:从SC表中把选择何炅老师的课程的女生的选课记录删除
DELETE
FROM
  SC,
  S,
  C
WHERE
  SC.SNO = S.SNO
AND SC.CNO = C.CNO
AND C.CTEACHER = '何炅老师'
-- 3:查询选何炅老师的课程的女生且成绩在80分以上
SELECT
  S.*
FROM
  S
INNER JOIN SC ON SC.SNO = S.SNO
INNER JOIN C ON C.CNO = SC.CNO
WHERE
  C.CTEACHER = '何炅老师'
AND SC.SCGRADE > 80
AND S.SEX = 0 
-- 4:找出没有选修过何炅老师的课程的所有学生的姓名(两种写法)
SELECT
  S.SNAME
FROM
  S
WHERE
  S.SNO NOT IN (
    SELECT
      S.SNO
    FROM
      S
    INNER JOIN SC ON SC.SNO = S.SNO
    INNER JOIN C ON C.CNO = SC.CNO
    WHERE
      C.CTEACHER = '何炅老师'
  ) 
SELECT
    SNAME
  FROM
    S
  WHERE
    NOT EXISTS (
      SELECT
        *
      FROM
        SC,
        C
      WHERE
        SC.CNO = SC.CNO
      AND SC.SNO = S.SNO
      AND C.CTEACHER = '何炅老师'
    ) 
-- 5:列出有两门以上(包含两门)不及格课程(成绩小于60分)的学生的姓名及其平均成绩(两种方式)
SELECT
  S.SNAME,
  AVG(sc.SCGRADE)
FROM
  SC
INNER JOIN S ON S.SNO = sc.SNO
WHERE
  sc.SNO IN (
    SELECT
      sc.SNO
    FROM
      SC
    WHERE
      SC.SCGRADE < 60
    GROUP BY
      sc.SNO
    HAVING
      COUNT(1)>= 2
  )
GROUP BY
  sc.SNO;
SELECT
  S.SNAME,
  AVG(sc.SCGRADE)
FROM
  s,
  sc,
  (
    SELECT
      sc.SNO
    FROM
      SC
    WHERE
      SC.SCGRADE < 60
    GROUP BY
      sc.SNO
    HAVING
      COUNT(1) >= 2
  ) A
WHERE
  A.SNO = s.SNO
AND s.SNO = sc.SNO
GROUP BY
  sc.SNO
-- 6:列举出即学过1(科学)又学过2(编程)的所有学生姓名(两种方式)
SELECT
  s.SNAME
FROM
  s,
  sc
WHERE
  s.sno = sc.SNO
AND sc.CNO = 2
AND sc.SNO IN (
  SELECT
    sc.SNO
  FROM
    sc
  WHERE
    sc.CNO = 1
) 
SELECT
    s.SNAME
  FROM
    s,
    (
      SELECT
        SNO
      FROM
        sc
      WHERE
        CNO IN (1, 2)
      GROUP BY
        SNO
      HAVING
        count(CNO) >= 2
    ) AS a
  WHERE
    s.sno = a.SNO
-- 7:列出1(科学)成绩比2(编程)的学生成绩高的所有学生的学号和姓名
SELECT
  s.sno,
  s.SNAME
FROM
  s,
  (
    SELECT
      sc.SNO,
      sc.SCGRADE
    FROM
      sc
    WHERE
      sc.CNO = 1
  ) k,
  (
    SELECT
      sc.SNO,
      sc.SCGRADE
    FROM
      sc
    WHERE
      sc.CNO = 2
  ) b
WHERE
  s.SNO = k.SNO
AND k.SNO = b.SNO
AND k.SCGRADE > b.SCGRADE
-- 8:列出1(科学)成绩比2(编程)的学生成绩高的所有学号及其1号课(科学)和2号课(编程)的成绩
SELECT
  s.sno,
  s.SNAME,
  k.SCGRADE AS "1",
  b.SCGRADE AS "2"
FROM
  s,
  (
    SELECT
      sc.SNO,
      sc.SCGRADE
    FROM
      sc
    WHERE
      sc.CNO = 1
  ) k,
  (
    SELECT
      sc.SNO,
      sc.SCGRADE
    FROM
      sc
    WHERE
      sc.CNO = 2
  ) b
WHERE
  s.SNO = k.SNO
AND k.SNO = b.SNO
AND k.SCGRADE > b.SCGRADE
目录
相关文章
|
2天前
|
数据采集 人工智能 安全
|
11天前
|
云安全 监控 安全
|
3天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1020 151
|
3天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话
|
16天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1716 9
|
8天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
658 152
|
10天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
623 12
|
5天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
382 4