针对学生教师的28道练习题的思路

链接:https://pan.baidu.com/s/1TgqFAe7i0PAkZOm47-Jd0A
提取码:vvi6

部分截图如下:

-- sql 28道练习题答案

-- 1.查询“某1”课程比“某2”课程成绩高的所有学生的学号
SELECT sid,sname FROM student WHERE sid IN
(
SELECT a.sid FROM (SELECT s.score,s.sid FROM score s INNER JOIN course c ON c.cid= s.cid
WHERE c.cname='语文')AS a,
(SELECT s.score,s.sid FROM score s INNER JOIN course c ON c.cid= s.cid
WHERE c.cname='英语')AS b
WHERE a.sid=b.sid AND a.score>b.score
)
-- 外部应用内连接查询1,内部应用内连接查询1+内连接查询2+条件查询(where)and
-- 2.查询平均成绩大于60分的同学的学号和平均成绩;
SELECT AVG(score),sid FROM score AVG(s.score)>60 -- 错误
SELECT AVG(score),sid FROM score s GROUP BY sid HAVING AVG(s.score)>60 -- 正确
-- 聚合函数,分组查询
-- 3.查询所有同学的学号、姓名、选课数、总成绩
SELECT SUM(score),COUNT(cid),sid FROM score GROUP BY sid -- 总成绩,选课数,学号
SELECT sname,sid sid FROM student GROUP BY sid -- 学号,姓名 SELECT SUM(score),COUNT(cid),s.sid,s.sname sid FROM score sc LEFT JOIN student s
ON sc.sid=s.sid GROUP BY s.sid -- 总成绩,选课数,学号,姓名
-- 左外连接查询,分组查询,聚合函数
-- 4.查询姓“李”的老师的个数;
SELECT COUNT(tid) FROM teacher WHERE tname='李'
-- 聚合函数,条件查询 -- 5.查询没学过“李”老师课的同学的学号、姓名;
SELECT c.cid,c.tid,sc.sid FROM course c LEFT JOIN score sc ON c.cid = sc.cid -- 查询课程相同的学生信息
SELECT t.tid,c.cid,t.tname FROM teacher t RIGHT JOIN course c ON t.tid =c.tid WHERE t.tname='李' -- 查询李老师教的课的课程信息 -- 上过李老师课的学生学号
SELECT a.sid FROM
(SELECT c.cid,c.tid,sc.sid FROM course c INNER JOIN score sc ON c.cid = sc.cid)AS a,
(SELECT t.tid,c.cid,t.tname FROM teacher t INNER JOIN course c ON t.tid =c.tid WHERE t.tname='李')AS b
WHERE a.tid = b.tid
-- 没上过李老师课的学生学号,姓名
SELECT sid,sname FROM student WHERE sid NOT IN (
SELECT a.sid FROM
(SELECT c.cid,c.tid,sc.sid FROM course c RIGHT JOIN score sc ON c.cid = sc.cid)AS a,
(SELECT t.tid,c.cid,t.tname FROM teacher t RIGHT JOIN course c ON t.tid =c.tid WHERE t.tname='李')AS b
WHERE a.tid = b.tid
) -- 同第一题解题思路+not in 的使用,外部条件查询in+内部右(左,内都可以)连接查询,条件查询where
-- 6.查询学过“```”并且也学过“```”课程的同学的学号、姓名;
SELECT sc.sid,c.cid FROM course c INNER JOIN score sc ON c.cid=sc.cid WHERE c.cname='语文' -- 学过语文的学生学号
SELECT sc.sid,c.cid FROM course c INNER JOIN score sc ON c.cid=sc.cid WHERE c.cname='英语' -- 学过英语的学生学号
-- 都学过的学号相同
SELECT sid,sname FROM student WHERE sid IN (
SELECT a.sid FROM
(SELECT sc.sid,c.cid FROM course c INNER JOIN score sc ON c.cid=sc.cid WHERE c.cname='语文')AS a,
(SELECT sc.sid,c.cid FROM course c INNER JOIN score sc ON c.cid=sc.cid WHERE c.cname='英语')AS b
WHERE a.sid=b.sid
)
-- 外部笛卡尔积查询,条件查询(in),
-- 7.查询学过“李”老师所教的所有课的同学的学号、姓名;
SELECT c.cid FROM course c INNER JOIN teacher t ON c.tid=t.tid WHERE t.tname='李' -- 查询李老师教的课程
SELECT sc.sid FROM course c INNER JOIN score sc ON c.cid=sc.cid -- 查询学生的学号及所学课程的课程号 SELECT sid,sname FROM student WHERE sid IN(
SELECT a.sid FROM
(SELECT c.cid,sc.sid FROM course c INNER JOIN score sc ON c.cid=sc.cid)AS a,
(SELECT c.cid FROM course c INNER JOIN teacher t ON c.tid=t.tid WHERE t.tname='李')AS b
WHERE a.cid=b.cid
)

---------------------------------------------------------------------------------------------------

演草纸中思路:

第一题:

//语文比数学成绩高的所有学生的学号
应用理解:班级学生应用
1.所有学生的语文成绩:成绩表,课程表,并得到学号
2.所有学生的数学成绩:成绩表,课程表,并得到学号
3.同一个学生sid=sid:a.sid = b.sid
4.语文成绩>数学成绩 where a.score = b.score 1.select a.sid from (select s.score,s.sid from score s inner join course c on c.cid= s.cid
where c.cname='语文')as a
2.
3.
4.
从学生表中查找、根据学号查找,求学号,
根据两张表求学号
select sid from student where sid in
(
select a.sid from (select s.score,s.sid from score s inner join course c on c.cid= s.cid
where c.cname='语文')as a,
select b.sid from (select s.score,s.sid from score s inner join course c on c.cid= s.cid
where c.cname='数学')as b
where a.sid=b.sid and a.score>b.score
) (
SELECT a.sid FROM (SELECT s.score,s.sid FROM score s INNER JOIN course c ON c.cid= s.cid
WHERE c.cname='语文')AS a,(SELECT s.score,s.sid FROM score s INNER JOIN course c ON c.cid= s.cid
WHERE c.cname='英语')AS b WHERE a.sid=b.sid AND a.score>b.score
) select a.sid from a,b where a.sid=b.sid 2.查询平均成绩大于60分的同学的学号和平均成绩;
平均成绩avg(score)>60
sid
成绩表
select avg(score),sid from score avg(s.score)>60
SELECT AVG(score),sid FROM score s GROUP BY sid HAVING AVG(s.score)>60
3.查询所有同学的学号、姓名、选课数、总成绩
应用:班级教师想要了解学生情况 学号,总成绩,选课数,-成绩表,课程表
姓名 学生表
select sc.sid,sum(score),count(cid) from score sc inner join course c
on sc.cid=c.cid
(SELECT SUM(score) ssum,COUNT(cid) ccount,sid FROM score GROUP BY sid) as a
(SELECT sname,sid FROM student GROUP BY sid)as b
这两个表如何连接呢?有共同的sid,合并共同的,留下不同的,用什么方法,
连接查询
SELECT SUM(score),COUNT(cid),sid sid FROM score left join student group by sid 4.查询姓“李”的老师的个数
select count(tid) from teacher where tname='李'
-- 聚合函数,条件查询
5.查询没学过“李”老师课的同学的学号、姓名;
查询上课的学生学号、姓名 select sid,sname
成绩表,学生表
没上过'李'老师的课
上过'李'老师的课 where tname='李'
查询学号:
上过李老师课的学生学号
不在上过'李'老师学生 学号 中查询
上过李老师课的学生学号:
select sid from
上过李老师的课
select a.sid from
(select sc.sid from course c inner join score sc on c.cid = sc.cid )as a
,(select * from teacher t inner join course c on t.tid =c.tid where t.tname='李') 6.查询学过“语文”并且也学过“英语”课程的同学的学号、姓名;
查询学过语文的同学学号
查询学过英语的同学学号
sid=sid
通过学号from student 得到sname
select sid,sname from student where sid in
查询学过语文的同学学号:
select sc.sid,c.cid from course c inner join score sc where c.cname='语文'
7.查询学过“李”老师所教的所有课的同学的学号、姓名
查询李老师教的课
select c.cid from course c inner join teacher t on c.tid=t.tid where t.tname='李'
select sid,sname from student where sid in -- 根据学号查询学生姓名
select sc.sid from course c inner join score s on c.cid=sc.cid

写sql语句思路--28道关于教师、学生、成绩表的练习题---个人思路的更多相关文章

  1. 写sql语句分别按日,星期,月,季度,年统计

    --写sql语句分别按日,星期,月,季度,年统计销售额 --按日 ' group by day([date]) --按周quarter ' group by datename(week,[date]) ...

  2. (摘至)程序员老鸟写sql语句的经验之谈

    做管理系统的,无论是bs结构的还是cs结构的,都不可避免的涉及到数据库表结构的设计,sql语句的编写等.因此在开发系统的时候,表结构设计是否合理,sql语句是否标准,写出的sql性能是否优化往往会成为 ...

  3. 程序员老鸟写sql语句的经验之谈

    做管理系统的,无论是bs结构的还是cs结构的,都不可避免的涉及到数据库表结构的设计,sql语句的编写等.因此在开发系统的时候,表结构设计是否合理,sql语句是否标准,写出的sql性能是否优化往往会成为 ...

  4. 写sql语句注意事项

    做管理系统的,无论是bs结构的还是cs结构的,都不可避免的涉及到数据库表结构的设计,sql语句的编写等.因此在开发系统的时候,表结构设计是否合理,sql语句是否标准,写出的sql性能是否优化往往会成为 ...

  5. Python 数据分析:让你像写 Sql 语句一样,使用 Pandas 做数据分析

    Python 数据分析:让你像写 Sql 语句一样,使用 Pandas 做数据分析 一.加载数据 import pandas as pd import numpy as np url = ('http ...

  6. PL/SQL中直接写SQL语句和用EXECUTE IMMEDIATE方法的区别

    PL/SQL中直接写SQL语句和用EXECUTE IMMEDIATE方法的区别 在PL/SQL中在执行SQL语句时可以直接写SQL或者可以把一个SQL语句拼成一个字符串,如下: select * fr ...

  7. 《你还在写sql语句吗?》人生苦短,进入MybatisPlus的丝滑体验

    一.发展历程 依稀记得大学期间,类中写sql语句的日子,一个sql语句占据了大部分时间,到后来hibernate的出现算是解决了这一痛点.工作 后,我们又接触到了mybatis这样的框架,瞬间感觉这个 ...

  8. 用SQL语句创建和删除Access数据库中的表;添加列和删除列

    用SQL语句创建和删除Access数据库中的表;添加列和删除列 Posted on 2009-08-11 13:42 yunbo 阅读(1240) 评论(0) 编辑 收藏 用SQL语句创建和删除Acc ...

  9. HAVING,多表查询思路,可视化软件navicat,多表查询练习题,

    HAVING "where"是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之 前起作用,且"where"后面不能写&quo ...

  10. 在mybatis中写sql语句的一些体会

    本文会使用一个案例,就mybatis的一些基础语法进行讲解.案例中使用到的数据库表和对象如下: article表:这个表存放的是文章的基础信息 -- ------------------------- ...

随机推荐

  1. 对C语言符号的一些冷门知识运用的剖析和总结

    符号 目录 符号 注释 奇怪的注释 C风格的注释无法嵌套 一些特殊的注释 注释的规则建议 反斜杠'\' 反斜杠有续行的作用,但要注意续行后不能添加空格 回车也能起到换行的作用,那续行符的意义在哪? 反 ...

  2. 【转载】只有.dbf数据文件进行数据库恢复

    此篇文章为转载,来自 " ITPUB博客 " ,链接:http://blog.itpub.net/26015009/viewspace-714742/ 个人mark下,在之后dbf ...

  3. SATA与PCI-E速度对比

    SATA SATA接口已经发展到了第三代,理论上的最大速度达到600MB/s.平时大家见到的SATA SSD使用的都是SATA三代,实际测试速度在550MB/s左右,这比普通的机械硬盘的速度100MB ...

  4. Django RESTful API设计与实践指南

    title: Django RESTful API设计与实践指南 date: 2024/5/14 15:37:45 updated: 2024/5/14 15:37:45 categories: 后端 ...

  5. 基于 OAI 部署私有的 4G EPS

    目录 文章目录 目录 前言 硬件设备要求 运行平台 RF 外设 可编程 SIM 卡 UE 终端 高精度参考时钟 操作系统要求 内核要求 CPU Frequency scaling All-In-One ...

  6. pageoffice 5.x升级到pageoffice 6.x的关键步骤

    Vue+Springboot前后端分离项目 将后端Springboot项目中pom.xml文件中对于pageoffice的jar引用升级成6.0版本,以maven中央仓库(https://mvnrep ...

  7. 日常Bug排查-偶发性读数据不一致

    日常Bug排查-偶发性读数据不一致 前言 日常Bug排查系列都是一些简单Bug的排查.笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材. Bug现场 业务场景 先描述这个问题出现的业务场景. ...

  8. 一文教你基于LangChain和ChatGLM3搭建本地知识库问答

    本文分享自华为云社区<[云驻共创]LangChain+ChatGLM3实现本地知识库,转华为云ModelArts,实现大模型AI应用开发> ,作者:叶一一. 一.前言 本期华为云的讲师是华 ...

  9. H.265码流解析

    这一篇内容旨在对H.265码流中的一些概念做简单了解,部分概念与H.264相同,本篇中将不再重复. 1.NALU H.265(HEVC)码流的NALU结构和AVC有一些不同,属于增强版,HEVC NA ...

  10. WPF 实现触摸滑动功能

    自定义ScrollViewer的Touch事件--触摸上下移动ScrollViewer滚动到指定位置   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...